移动应用-Android-开发指南

Android-UI开发指南

  • Android Studio调试
  • UI设计
    • UI框架
    • 布局Layout
    • 文本框
  • android的活动
    • Activity基本概念
    • Activity的生命周期
    • Activity栈
    • 创建Activity
    • 管理Activity
    • Activity间传递数据
  • Fragment
  • Adapter
  • RecyclerView
  • RecyclerView Adapter(适配器)
  • 事件
    • setOnItemLongClickListener()方法

移动应用-Android-开发指南_第1张图片

Android Studio调试

移动应用-Android-开发指南_第2张图片移动应用-Android-开发指南_第3张图片
移动应用-Android-开发指南_第4张图片
移动应用-Android-开发指南_第5张图片
移动应用-Android-开发指南_第6张图片
移动应用-Android-开发指南_第7张图片
移动应用-Android-开发指南_第8张图片
移动应用-Android-开发指南_第9张图片
移动应用-Android-开发指南_第10张图片
移动应用-Android-开发指南_第11张图片
移动应用-Android-开发指南_第12张图片
移动应用-Android-开发指南_第13张图片
移动应用-Android-开发指南_第14张图片
移动应用-Android-开发指南_第15张图片
移动应用-Android-开发指南_第16张图片移动应用-Android-开发指南_第17张图片移动应用-Android-开发指南_第18张图片移动应用-Android-开发指南_第19张图片在这里插入图片描述移动应用-Android-开发指南_第20张图片移动应用-Android-开发指南_第21张图片移动应用-Android-开发指南_第22张图片移动应用-Android-开发指南_第23张图片

UI设计

UI框架

移动应用-Android-开发指南_第24张图片
移动应用-Android-开发指南_第25张图片
移动应用-Android-开发指南_第26张图片

移动应用-Android-开发指南_第27张图片
移动应用-Android-开发指南_第28张图片

移动应用-Android-开发指南_第29张图片
移动应用-Android-开发指南_第30张图片
移动应用-Android-开发指南_第31张图片
移动应用-Android-开发指南_第32张图片
移动应用-Android-开发指南_第33张图片
移动应用-Android-开发指南_第34张图片
移动应用-Android-开发指南_第35张图片
移动应用-Android-开发指南_第36张图片移动应用-Android-开发指南_第37张图片移动应用-Android-开发指南_第38张图片移动应用-Android-开发指南_第39张图片移动应用-Android-开发指南_第40张图片

布局Layout

移动应用-Android-开发指南_第41张图片移动应用-Android-开发指南_第42张图片

1.线性布局 LinearLayout移动应用-Android-开发指南_第43张图片

  • 排列方式(orientation) 有横竖两种方向的,水平和垂直
    在xml文件中:
android:orientation="vertical"   // 垂直排列
android:orientation="horizontal" // 水平排列

在java代码中:

linearLayout.setOrientation(LinearLayout.VERTICAL);  // 设置垂直排列
linearLayout.setOrientation(LinearLayout.HORIZONTAL);// 设置水平排列
  • 这里需要注意:
android:orientation="vertical",子View使用layout_gravity在垂直方向上的设定无效
android:orientation="horizontal",子View使用layout_gravity在水平方向上的设定无效
  • 摆放位置(gravity/layout_gravity)

gravity是针对当前 控件里面 内容 的摆放,
如果是容器,则针对的是容器里面子view的摆放;
如果是控件,则针对的是控件里面内容的摆放。

layout_gravity是指当前控件在 父控件里面 的摆放位置,
不过需要注意的一点是父控件设置的gravity的级别要低于子控件设置的layout_gravity。

  • 权重(layout_weight)
    layout_weight
    在LinearLayout布局之中,权重也是一个很重要的属性。简单来说就是按比例来分配控件占用父控件的大小。

若C-child表示子布局声明的大小,B-blank表示剩余布局的大小,P-percent表示子布局占据父布局剩余布局的比例,则子布局最终的实际大小R-reality为:

R = C + B * P

移动应用-Android-开发指南_第44张图片

我们来按照公式来计算

 R = C + B * P = 0dp + (B-0dp-0dp) * (1/2) = (1/2)B

也就是父布局的1/2。

  • weightSum
    LinearLayout有一个权重数量的标记:weightSum。
    在LinearLayout中没有声明weightSum时,
    默认的就是各个控件权重的总和。

  • 0dp与wrap_content
    谷歌官方建议子布局的layout_width使用0dp,来分比例显示布局,
    和wrap_content大同小异,当使用layout_weight时,都表示占据剩余宽度或高度的比重。

但两者有明显区别。

使用0dp时,要考虑所分配的布局宽度是否小于控件实际宽度

  • B是剩余布局的大小 = 父布局大小 - 子控件大小之和

    B = C - (C + C) = -C;

    R = C + B * P = C + (-C) * (1/3) = 2/3C
    这里的C就是父布局的大小也就是match_parent。

移动应用-Android-开发指南_第45张图片移动应用-Android-开发指南_第46张图片移动应用-Android-开发指南_第47张图片移动应用-Android-开发指南_第48张图片移动应用-Android-开发指南_第49张图片
移动应用-Android-开发指南_第50张图片移动应用-Android-开发指南_第51张图片
在这里插入图片描述
移动应用-Android-开发指南_第52张图片
移动应用-Android-开发指南_第53张图片
移动应用-Android-开发指南_第54张图片移动应用-Android-开发指南_第55张图片移动应用-Android-开发指南_第56张图片移动应用-Android-开发指南_第57张图片移动应用-Android-开发指南_第58张图片
移动应用-Android-开发指南_第59张图片

三个属性都用来适应视图的 水平或 垂直大小,
一个以视图的 内容或尺寸 为基础的 布局比
精确地指定视图范围更加方便。

1)fill_parent

设置一个构件的布局为fill_parent将强制性地使构件扩展,
以填充布局单元内尽可能多的空间。
这跟Windows控件的dockstyle属性大体一致。
设置一个顶部布局或控件为fill_parent将强制性让它布满整个屏幕。

2) wrap_content

设置一个视图的尺寸为wrap_content将强制性地使视图扩展以显示全部内容。
以TextView和ImageView控件为例,
设置为wrap_content将完整显示其内部的文本和图像。
布局元素将根据内容更改大小。
设置一个视图的尺寸为wrap_content大体等同于设置Windows控件的Autosize属性为True。

3)match_parent
Android2.2中match_parent和fill_parent是一个意思 .
两个参数意思一样,match_parent更贴切,
于是从2.2开始两个词都可以用。
那么如果考虑低版本的使用情况你就需要用fill_parent了

文本框

移动应用-Android-开发指南_第60张图片
移动应用-Android-开发指南_第61张图片
移动应用-Android-开发指南_第62张图片
移动应用-Android-开发指南_第63张图片移动应用-Android-开发指南_第64张图片移动应用-Android-开发指南_第65张图片移动应用-Android-开发指南_第66张图片移动应用-Android-开发指南_第67张图片
移动应用-Android-开发指南_第68张图片
移动应用-Android-开发指南_第69张图片
移动应用-Android-开发指南_第70张图片

移动应用-Android-开发指南_第71张图片
移动应用-Android-开发指南_第72张图片移动应用-Android-开发指南_第73张图片移动应用-Android-开发指南_第74张图片移动应用-Android-开发指南_第75张图片移动应用-Android-开发指南_第76张图片

android的活动

移动应用-Android-开发指南_第77张图片

Activity基本概念

移动应用-Android-开发指南_第78张图片
移动应用-Android-开发指南_第79张图片移动应用-Android-开发指南_第80张图片移动应用-Android-开发指南_第81张图片移动应用-Android-开发指南_第82张图片

Activity的生命周期

移动应用-Android-开发指南_第83张图片移动应用-Android-开发指南_第84张图片
移动应用-Android-开发指南_第85张图片移动应用-Android-开发指南_第86张图片移动应用-Android-开发指南_第87张图片移动应用-Android-开发指南_第88张图片移动应用-Android-开发指南_第89张图片移动应用-Android-开发指南_第90张图片移动应用-Android-开发指南_第91张图片移动应用-Android-开发指南_第92张图片移动应用-Android-开发指南_第93张图片移动应用-Android-开发指南_第94张图片移动应用-Android-开发指南_第95张图片移动应用-Android-开发指南_第96张图片移动应用-Android-开发指南_第97张图片移动应用-Android-开发指南_第98张图片移动应用-Android-开发指南_第99张图片

Activity栈

移动应用-Android-开发指南_第100张图片
移动应用-Android-开发指南_第101张图片
移动应用-Android-开发指南_第102张图片移动应用-Android-开发指南_第103张图片移动应用-Android-开发指南_第104张图片移动应用-Android-开发指南_第105张图片
移动应用-Android-开发指南_第106张图片

创建Activity

移动应用-Android-开发指南_第107张图片
移动应用-Android-开发指南_第108张图片
移动应用-Android-开发指南_第109张图片移动应用-Android-开发指南_第110张图片

管理Activity

移动应用-Android-开发指南_第111张图片
移动应用-Android-开发指南_第112张图片移动应用-Android-开发指南_第113张图片
移动应用-Android-开发指南_第114张图片

移动应用-Android-开发指南_第115张图片
移动应用-Android-开发指南_第116张图片

Activity间传递数据

移动应用-Android-开发指南_第117张图片
移动应用-Android-开发指南_第118张图片
移动应用-Android-开发指南_第119张图片
移动应用-Android-开发指南_第120张图片
移动应用-Android-开发指南_第121张图片
移动应用-Android-开发指南_第122张图片

Fragment

Adapter

负责将数据绑定到View上

RecyclerView

RecyclerView是用于展示大量数据集合的高效控件

RecyclerView Adapter(适配器)

是Android开发中用于管理RecyclerView的重要组件之一。

主要完成以下几个任务:

创建ViewHolder:在RecyclerView中,每个子项都需要一个ViewHolder来显示数据。Adapter负责创建和管理ViewHolder对象,通常通过继承RecyclerView.Adapter类来实现自定义的Adapter,并重写其中的方法。

绑定数据到ViewHolder:Adapter中的onBindViewHolder()方法负责将数据与ViewHolder进行绑定。在该方法中,您可以获取当前位置的数据,并将其设置到ViewHolder的各个视图中。

定义Item视图类型:如果RecyclerView中存在多个不同的Item视图类型,Adapter可以通过重写getItemViewType()方法返回不同的视图类型,以便RecyclerView能够正确渲染不同类型的子项。

确定子项数量:Adapter需要实现getItemCount()方法来指定RecyclerView中子项的数量。

响应用户交互:通过Adapter可以为RecyclerView的子项添加点击事件、长按事件等交互操作。

总之,RecyclerView Adapter充当了RecyclerView与数据之间的桥梁,负责将数据展示到RecyclerView中,并处理与用户交互相关的操作。

事件

setOnItemLongClickListener()方法

 
        LinearLayout mainLayout = new LinearLayout(this);
        mainLayout.setOrientation(LinearLayout.VERTICAL);
        mainLayout.setBackgroundColor(0xFFF6F8FB);

        FrameLayout frameLayout = new FrameLayout(this);
        frameLayout.setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                0,
                1
        ));
        mainLayout.addView(frameLayout);

        LinearLayout tabLayout = new LinearLayout(this);
        tabLayout.setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                dip2px(88)
        ));
        tabLayout.setOrientation(LinearLayout.HORIZONTAL);
        tabLayout.setPadding(dip2px(15), 0, dip2px(15), dip2px(15));
        tabLayout.setBackgroundResource(R.drawable.sp_main_tab_n);
        mainLayout.addView(tabLayout);

        // 添加第一个Tab
        FrameLayout tab1FrameLayout = new FrameLayout(this);
        tab1FrameLayout.setLayoutParams(new LinearLayout.LayoutParams(
                0,
                LinearLayout.LayoutParams.MATCH_PARENT,
                1
        ));
        tabLayout.addView(tab1FrameLayout);

        LinearLayout tab1Layout = new LinearLayout(this);
        tab1Layout.setId(R.id.tabLin5);
        tab1Layout.setLayoutParams(new LinearLayout.LayoutParams(
                dip2px(64),
                dip2px(56)
        ));
        tab1Layout.setOrientation(LinearLayout.VERTICAL);
        tab1Layout.setGravity(Gravity.CENTER);
        tab1Layout.setBackgroundResource(R.drawable.sp_main_tab);
        tab1FrameLayout.addView(tab1Layout);

        ImageView tab1ImageView = new ImageView(this);
        tab1ImageView.setId(R.id.iv5);
        tab1ImageView.setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT
        ));
        tab1ImageView.setImageResource(R.drawable.sp_home_tab5);
        tab1Layout.addView(tab1ImageView);

        TextView tab1TextView = new TextView(this);
        tab1TextView.setId(R.id.tv_tab5);
        tab1TextView.setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT
        ));
        tab1TextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
        tab1TextView.setGravity(Gravity.CENTER);
        tab1TextView.setTextColor(ContextCompat.getColor(this, R.color.s_main_tab_text));
        tab1TextView.setText(R.string.Contacts);
        tab1Layout.addView(tab1TextView);


        // 设置TabLayout置底显示
        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tabLayout.getLayoutParams();
        params.gravity = Gravity.BOTTOM;
        tabLayout.setLayoutParams(params);


        // 添加其他Tab的代码类似,省略

        setContentView(mainLayout);





    private int dip2px(float dpValue) {
        final float scale = getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

你可能感兴趣的:(android)