android四级联动
❶ Android 怎么动态的设置Spinner联动
重写一下Adapter,然后自己对Adapter每个Item布局,在布局里面设置一下点击效果就行了。如:
public class MainActivity extends Activity {
private Spinner mSpinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView(){
mSpinner = (Spinner)findViewById(R.id.spinner);
MyAdapter adapter = new MyAdapter(getResources().getStringArray(R.array.girl_names));
mSpinner.setAdapter(adapter);
}
private class MyAdapter extends BaseAdapter{
private String[] idInt ;
public MyAdapter(String[] idInt){
this.idInt = idInt;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return idInt.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return idInt[arg0];
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
if(arg1 == null){
arg1 = getLayoutInflater().inflate(R.layout.spinner_item, null);
}
TextView text = (TextView)arg1.findViewById(R.id.spinner_item_id);
text.setText(idInt[arg0]);
return arg1;
}
}
spinner_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/text_selector"
android:orientation="vertical" >
<TextView
android:layout_margin="10dip"
android:id="@+id/spinner_item_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true" >
</TextView>
</LinearLayout>
然后:text_selector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:drawable="@android:color/black"></item>
<item android:state_pressed="false" android:drawable="@android:color/transparent"></item>
</selector>
❷ Android活动命名是怎样的规则
一.标识符命名方法
1 .小驼峰命名法,除首单词外,其余所有单词的第一个字母大写。如:allPrice,getAllNames
2.大驼峰命名法,所有单词的第一个字母大写。如:GuideActivity,StudentInfoBean
3.下划线命名法:单词与单词间用下划线做间隔。如:activity_main,select_backGround_color
二.命名规范
(一)包(packages)的命名规范:
采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名lwz(为个人或公司名称,可以简写),三级包名guidecity(根据应用进行命名),四级包名ui或utils等(模块名或层级名),根据实际情况也是可以用五级包名,六级包名。
这里的四级包名是要重点理解和分类的,例如:com.lwz.应用.utils ,此包中包含:公共工具方法类
1.utils
此包中包含:公共工具方法类,比如:SPHelperUtil、TimeUitl、FileUtil等
2.adapter
此包中包含:一些适配器的类,比如:ArticleAdapter、FansAdapter,HistorAdaper等
3.base
此包中包含:一些共同类的基类,比如:BaseActivity(所有的Activity类都继承这个类)、BaseFragment(所有的Fragment都继承这个类),ListItemAdapter(封装了Base Adapter的基类)等
4.bean
此包中包含:一些属性对象类,比如:StudentBean、LonginBean、ArticleBean等
5.config
此包中包含:最顶级的配置类,比如:MyApp(继承了Application)
6.httpservice
此包中包含:Http数据的请求接口类,好像Retrofit网络框架请求网络数据才要使用。如:ILogin接口,IAddTopic接口,IUpdate等
7.interface
此包中包含:某个页面或对象的所用操作接口类,这个接口主要是定义这个对象的所有方法。如:IUser接口,IArticle接口,ITopic接口等
8.model
这是MVC或MVP框架设计中的M。此包中包含:某个页面或对象的所用操作类,这个类继承了上面定义的interface接口,重写并实现厘米那的方法。如:UserModel,ArticleMode类,TopicMode类等
9.ui
这个ui表示的页面的意思,也是MVC或MVP中的V,很多人把这个包名写成activity,其实是不准确的,因为ui包含了activity和fragment,所以ui是四级包名,而activity和fragment是ui包下的五级包名。
activity此包中包含:Activity对象类。如:MainActivity类,HomeActivity类,FansListActivity类等。如果是使用了MVP框架模式,activity包名下还可以有六级包名,比如:loginMVP(包含ILoginView接口类,LoginPresenter类)、seleteTopicMVP
fragment此包中包含:Fragment对象类。但是Fragment一般都是多个存在的,所以fragment包下一般还有六级包名,表示里面是哪个页面的Fragment对象。
10.weight
此包中包含:自定义View或自定义对话框等视图类。如:CursroDialog类,SpringScrollView类,ScrollListView类等
11.db
此包中包含:数据库操作类
12.service
此包中包含:Service服务类
13.broadcast
此包中包含:Broadcast广播接收者类
14.provider
此包中包含:Provider内容提供者类(用得很少)
包名规划我感觉对程序后期阅读或修改有很大的帮助,特别是很大的程序,文件太多,不规划的话自己都不知道这个类是干什么的!
当然如果程序中没有这一类的文件,这个包名是可以不写,但是一些基本的包名,基本每个程序都是需要的比如:ui、utils、adapter、weight、bean等
(二)类(classes)的命名规范:
一般用名词,采用大驼峰命名法,尽量避免缩写,除非该缩写是众所周知的,比如HTML,URL,如果类名称中包含单词缩写,则单词缩写的每个字母均应大写。
以下是部分示例说明:
1.activity 类,如欢迎页面类WelcomeActivity.
2.adapter类,如商品详情适配器ProctDetailAdapter
3.util公共方法类,如:线程池管理类:ThreadPoolManager,日志工具类:LogUtil
4.db数据库类,以DBHelper后缀标识。如城市数据库:CityDBHelper
5.Service类,以Service为后缀标识
6.BroadcastReceive,以Broadcast为后缀标识
7.ContentProvider,以Provider为后缀标识
(三)接口(interface):
命名规则与类一样采用大驼峰命名法,多以able或ible结尾或以I开头,如Runnable、Accessible、IUser。
(四)方法(methods)的命名规则:
一般使用动词或动名词,采用小驼峰命名法 例如:onCreate(),run()
>1.initXXX()初始化相关方法,使用init为前缀标识
2.isXXX()、checkXXX() 方法返回值为boolean型的请使用is或check为前缀标识
3.getXXX()返回某个值的方法,使用get为前缀标识
4.processXXX() 对数据进行处理的方法,尽量使用process为前缀标识
5.displayXXX() 弹出提示框和提示信息,使用display为前缀标识
6.saveXXX() 与保存数据相关的,使用sav为e前缀标识
7.resetXXX() 对数据重组的,使用reset前缀标识
8.clearXXX()removeXXX() 清除数据相关的,使用clear或remove为前缀标识
9.drawXXX() 绘制数据或效果相关的,使用draw前缀标识
(五)变量(variables)采用小驼峰命名法。类中控件名称一般与xml布局id保持一致
(六)常量(constants)全部大写,采用下划线命名法.例如:MIN_WIDTH
(七)XML文件(布局文件):全部小写,采用下划线命名法,
例如:main_activity.xml, item_activity.xml、homeposter_item_poster.xml
(八)资源文件(图片): 全部小写,采用下划线命名法,加前缀区分
命名
说明
btn_login_normal 按钮图片使用btn_功能_说明
bg_head 背景图片使用bg_功能_说明
def_search_cell 默认图片使用def_功能_说明
icon_more_help 图标图片使用icon_功能_说明
seg_list_line 具有分隔特征的图片使用seg_功能_说明
sel_ok 选择图标使用sel_功能_说明
(九)动画文件(anim包):全部小写,采用下划线命名法,加前缀区分。
动画命名例子:
规范写法
备注
click_head_left 点击背景切换动画使用click前缀标识
bg_shape_rectangle 背景自定义图形使用bg前缀标识
show_shopcar_add 小动画效果使用show前缀标识
(十)资源ID(resources id):大小写规范与方法名一致,采用小驼峰命名法。
命名规范为“资源控件的缩写名”+“变量名”。例如TextView的id=“tv_userName”。注意:页面控件名称应该和控件id名一般是一致,例如:TextView tv_userName=(TextView)findViewById(R.id.tv_userName);
三.图解包名规范示例
本文主要是想对程序包名的命名规划,这里展示我之前开发的程序的包名图片,供大家参考:
(一)总显示
上面example这个包名一般是不用的!
(二)ui包下
fragment展示
activity 展示:
(三)utils和weight包下
(四)res文件夹下的部分文件展示:
drawable包下:
layout包下:
上面就是一个完成程序的主要文件展示,这个程序大概有三百多个文件(包括java文件和资源文件),这里就不一一展示了!
大家可以想象一下,如果这个程序包名和文件名都没有很好规划,那么你要找你想要的几个文件是一个多么麻烦的事情!
一般地,我在创建每个java程序文件都会在上面做几句话的注解,说明一下这个文件的作用,有些布局文件也是有简单说明。这样更加有利于后期的程序代码迭代或版本更新!
命名规范是必须的吗?有些是!有些不是。比如包名、类的定义,系统没有硬性规定,但是资源文件res文件夹下的命名,系统要求资源文件名必须小写,否则,你的程序一直运行不了,你都不知道为啥。
最后说一句:程序开发中命名规范是一个很好的开发习惯!
❸ Android-RecycleView的双向列表左右联动效果
有一个需求,需要做一个左右双向联动的列表。类似于饿了么点餐页面,但是远没有那么复杂,只是用于展示的一个页面。只用了两个RecycleView加适配器,没有调用Fragment。
(另加 RecycleView中Item的,点击改变颜色,点击其他项改变颜色,上一次点击的变回原来的颜色)
❹ android一个页面可以有几种布局方法吗
Android界面五种常用布局方式
Android的界面由布局和组件协同完成,布局相当于整体框架,而组件则是框架里面的内容。组件按布局方式一次排列,就组成了用户所能看见的界面。Android的五大布局分别是LinearLayout(线性布局)、FrameLayout(单帧布局)、RelativeLayout(相对布局)、AbsoluteLayout(绝对布局)、TableLayout(表格布局)。
LinearLatout按照垂直或水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列,那么将是一个N行单列的结构,每行只会有一个元素,而不论这个元素的宽度是多少;如果是水平排列,那么将是一个单行N列的结构。如果搭建两行两列的结构,通常是先垂直排列两个元素,每个元素里再包含一个LinearLayout进行水平排列。
FrameLayout是五大布局中最简单的一种布局,在这个布局中,整个界面被当成一块备用的空白区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的元素直接覆盖在前面的子元素之上,将前面的子元素部分或全部遮挡。
AbsoluteLayout是绝对布局。在此布局中的子元素android:layout_x和android:layout_y属性将生效,用于描述该子元素的坐标位置。屏幕上左上角为坐标原点(0,0),第一个0代表横坐标,向右移动此值增大,第二个代表纵坐标,向下移动此值增大,在此布局中的子元素可以相互重叠。在四级开发中,通常不采用此布局方式,因为它的界面代码过于刚性,以至于不能很好的适配各种终端。
RelativeLayout按照各子元素之间的位置关系完成布局。在此布局中的子元素里与位置相关的属性将会生效。例如android:layout_below,android:layout_above等。子元素就通过这些属性和个自的ID配合指定位置关系。注意在指定位置关系时,引用的ID必须在引用前被定义,否则将出现异常。RelativeLayout是Android五大布局中较为灵活的一种布局方式,比较适合一些复杂的界面布局。
TableRow(表格布局)是LinearLayout的子类,它的Android:Layout_width和Layout_height属性恒为MATCH_PARENT和WRAP_CONTENT。所以它的子元素都是横向排列,并且宽高一致。这样的设计使得每个tablerow里的子元素都都相当于表格中的单元格一样。在TableRow中,单元格可以为空,但是不能跨列。