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中,單元格可以為空,但是不能跨列。