淘宝客优惠券网站怎么做,手机端编程软件,微信网页版入口,北京网站建设排名Android-UI开发指南 Android Studio调试UI设计UI框架布局Layout文本框 android的活动Activity基本概念Activity的生命周期Activity栈创建Activity管理ActivityActivity间传递数据 FragmentAdapterRecyclerViewRecyclerView Adapter#xff08;适配器#xff09;事件setOnItem… Android-UI开发指南 Android Studio调试UI设计UI框架布局Layout文本框 android的活动Activity基本概念Activity的生命周期Activity栈创建Activity管理ActivityActivity间传递数据 FragmentAdapterRecyclerViewRecyclerView Adapter适配器事件setOnItemLongClickListener()方法 Android Studio调试 UI设计
UI框架 布局Layout 1.线性布局 LinearLayout
排列方式(orientation) 有横竖两种方向的水平和垂直 在xml文件中:
android:orientationvertical // 垂直排列
android:orientationhorizontal // 水平排列在java代码中:
linearLayout.setOrientation(LinearLayout.VERTICAL); // 设置垂直排列
linearLayout.setOrientation(LinearLayout.HORIZONTAL);// 设置水平排列这里需要注意
android:orientationvertical子View使用layout_gravity在垂直方向上的设定无效
android:orientationhorizontal子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我们来按照公式来计算 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。 三个属性都用来适应视图的 水平或 垂直大小 一个以视图的 内容或尺寸 为基础的 布局比 精确地指定视图范围更加方便。
1fill_parent
设置一个构件的布局为fill_parent将强制性地使构件扩展 以填充布局单元内尽可能多的空间。 这跟Windows控件的dockstyle属性大体一致。 设置一个顶部布局或控件为fill_parent将强制性让它布满整个屏幕。
2 wrap_content
设置一个视图的尺寸为wrap_content将强制性地使视图扩展以显示全部内容。 以TextView和ImageView控件为例 设置为wrap_content将完整显示其内部的文本和图像。 布局元素将根据内容更改大小。 设置一个视图的尺寸为wrap_content大体等同于设置Windows控件的Autosize属性为True。
3match_parent Android2.2中match_parent和fill_parent是一个意思 . 两个参数意思一样match_parent更贴切 于是从2.2开始两个词都可以用。 那么如果考虑低版本的使用情况你就需要用fill_parent了
文本框 android的活动 Activity基本概念 Activity的生命周期 Activity栈 创建Activity 管理Activity Activity间传递数据 Fragment
Adapter
负责将数据绑定到View上
RecyclerView
RecyclerView是用于展示大量数据集合的高效控件
RecyclerView Adapter适配器
是Android开发中用于管理RecyclerView的重要组件之一。
主要完成以下几个任务
创建ViewHolder在RecyclerView中每个子项都需要一个ViewHolder来显示数据。Adapter负责创建和管理ViewHolder对象通常通过继承RecyclerView.Adapter类来实现自定义的Adapter并重写其中的方法。
绑定数据到ViewHolderAdapter中的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);// 添加第一个TabFrameLayout 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);}