工具栏,底部导航栏,可扩展列表视图
1.工具欄
這個(gè)概念,所接觸的很多開(kāi)發(fā)軟件或工具,都會(huì)碰到。在手機(jī)開(kāi)發(fā)的時(shí)候,可以進(jìn)行導(dǎo)航、顯示相應(yīng)的標(biāo)題等,使開(kāi)發(fā)者不至于在應(yīng)用程序中迷路。5.0使用Actionbar來(lái)實(shí)現(xiàn),很多公司都會(huì)對(duì)該類進(jìn)行定制,使用起來(lái)更加靈活。5.0之后使用Toolbar來(lái)取代之前的Actionbar,這個(gè)更加強(qiáng)大。
1.1 Toolbar類
1.顯示程序所處的位置。
2.提供一些重要的交互功能,比如說(shuō)搜索、跳轉(zhuǎn)等。
3.實(shí)現(xiàn)導(dǎo)航功能,例如返回按鈕等。
常用屬性和方法:
app:title setTitle(參數(shù)) 設(shè)置應(yīng)用程序主題
app:subtitle setSubtitle(參數(shù)) 設(shè)置小標(biāo)題
app:navigation setNavigation(int resId) 導(dǎo)航圖標(biāo)
logo setLogo(Drawable drawable) 程序logo
titleTextColor setTitleTextColor(int color) 設(shè)置標(biāo)題文字顏色
1.設(shè)計(jì)主界面.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><!-- 加入工具欄;android.support.v7.wideget.Toolbar--><Toolbarandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/toolbar"android:background="#9f9f9f"></Toolbar> </LinearLayout>2.設(shè)計(jì)菜單xml文件
步驟:
在res上右擊,選擇“new/andorid Resource Directory”,在彈出的對(duì)話框中,設(shè)置ResourceType為Menu,Directory Name采用默認(rèn)值,即可創(chuàng)建menu文件夾。
在menu上右擊,選擇“new/menu Resourcefile”,輸入文件名。
<?xml version="1.0" encoding="utf-8"?> <!--這里是以menu開(kāi)頭的自定義標(biāo)簽--> <menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><!-- 創(chuàng)建4個(gè)小選項(xiàng);showAsAction:ifRoomifRoom:表示有位置才顯示;always:總是顯示在界面上;never:從不顯示在界面上;--><itemandroid:icon="@mipmap/sousuo"android:title="搜索"android:id="@+id/action_find"app:showAsAction="ifRoom"/><itemandroid:icon="@mipmap/fenxiang"android:id="@+id/fenxiang"android:title="分享"app:showAsAction="ifRoom"/><itemandroid:title="設(shè)置"android:id="@+id/item1"app:showAsAction="never"/><itemandroid:title="關(guān)于"android:id="@+id/item2"app:showAsAction="never"/> </menu>3.修改主界面后臺(tái)代碼
package com.aaa.toolbardemo;import androidx.appcompat.app.AppCompatActivity;import android.graphics.Color; import android.os.Bundle; import android.widget.Toolbar;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//----------------------------------------Toolbar toolbar=(Toolbar) findViewById(R.id.toolbar);//導(dǎo)航加一個(gè)后退toolbar.setNavigationIcon(R.mipmap.houtui);toolbar.setTitle("首頁(yè)");toolbar.setTitleTextColor(Color.WHITE);//聲明菜單文件toolbar.inflateMenu(R.menu.base_toolbar_menu);} }2.底部導(dǎo)航欄
手機(jī)程序:QQ 拼夕夕 微信等,都會(huì)在程序下方放置導(dǎo)航。好處是可以進(jìn)行單手操作,即用戶單手完成界面切換,從而查看不同的信息。
2.1 BottomNavigationView類
用到了Fragment的知識(shí),每個(gè)item都有一個(gè)icon和一個(gè)title組成,單擊控制狀態(tài)即可。
通話(電話) 通信錄 設(shè)置
3.可擴(kuò)展列表視圖
一般用于數(shù)據(jù)的展開(kāi)和折疊這種場(chǎng)景,即可以單獨(dú)展開(kāi)的列表視圖。
ExpandableListView,是ListView的子類。本質(zhì)上是一個(gè)AdapterView,既然是AdapterView,在顯示數(shù)據(jù)的時(shí)候,就需要使用到適配器。適配器叫ExpandableAdapter,這個(gè)類派生于BaseExpandableListAdapter,需要重寫(xiě)setOnGroupClickListener()、setOnChildClickListener()、setOnGroupCollpaseListener()、setOnGroupExpandListener()方法。
實(shí)例
展示河南省、陜西省行政區(qū)信息的實(shí)例。
1.修改主界面
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"> <!-- 主界面就是可擴(kuò)展列表;android:groupIndicator="@null" 取值可以是任意的Drawable對(duì)象,不再顯示groupIndicator --><ExpandableListViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/expand_list"android:groupIndicator="@null"/></LinearLayout>2.父項(xiàng)列表內(nèi)容
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:background="#3f60CC"android:layout_height="50dp"><!-- 設(shè)計(jì)列表項(xiàng)的布局 --><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:id="@+id/parent_tv"android:textColor="#fff"android:gravity="center_vertical"android:paddingLeft="10dp"android:textSize="18sp"/><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/parent_img"android:layout_alignParentRight="true"android:src="@mipmap/right"android:paddingRight="10dp"/> </RelativeLayout>3.子項(xiàng)列表內(nèi)容
<?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"><!-- 設(shè)計(jì)列表項(xiàng)的具體數(shù)據(jù)的布局--><TextViewandroid:layout_width="match_parent"android:layout_height="40dp"android:id="@+id/children_item"android:gravity="center_vertical"android:paddingLeft="10dp"/> </LinearLayout>4.主界面后臺(tái)代碼
package com.aaa.expanddemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.View; import android.widget.ExpandableListView; import android.widget.Toast;public class MainActivity extends AppCompatActivity {//1.變量 對(duì)象ExpandableListView expand_list_id;String[]groups={"河南省","陜西省"};String[][]childs={{"鄭州市","安陽(yáng)市","駐馬店市"},{"西安市","咸陽(yáng)市","寶雞市"}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//--------------------------------------initView();// 這個(gè)是自定義的方法}private void initView() {expand_list_id=(ExpandableListView)findViewById(R.id.expand_list);ExpandableListViewAdapter adapter=new ExpandableListViewAdapter(this,groups,childs);expand_list_id.setAdapter(adapter);expand_list_id.expandGroup(0);//監(jiān)聽(tīng)事件expand_list_id.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {@Overridepublic boolean onGroupClick(ExpandableListView expandableListView, View view, int groupPosition, long l) {Toast.makeText(MainActivity.this, "你單擊了"+groups[groupPosition], Toast.LENGTH_LONG).show();return false;}});//監(jiān)聽(tīng)事件2expand_list_id.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {@Overridepublic boolean onChildClick(ExpandableListView expandableListView, View view, int groupPosition, int childPosition, long l) {Toast.makeText(MainActivity.this, "你單擊了"+childs[groupPosition][childPosition], Toast.LENGTH_LONG).show();return false;}});//監(jiān)聽(tīng)事件3expand_list_id.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {@Overridepublic void onGroupCollapse(int groupPosition) {Toast.makeText(MainActivity.this, "你收縮了"+groups[groupPosition], Toast.LENGTH_LONG).show();}});//監(jiān)聽(tīng)4expand_list_id.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {@Overridepublic void onGroupExpand(int groupPosition) {Toast.makeText(MainActivity.this, "你展開(kāi)了"+groups[groupPosition], Toast.LENGTH_LONG).show();}});} }5.子項(xiàng)擴(kuò)展代碼
package com.aaa.expanddemo;import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.ImageView; import android.widget.TextView;public class ExpandableListViewAdapter extends BaseExpandableListAdapter {//1.成員變量private String[]groups;private String[][]childs;private Context context;//構(gòu)造方法,和IDEA一樣。public ExpandableListViewAdapter(Context context,String[] groups, String[][] childs) {this.groups = groups;this.childs = childs;this.context = context;}@Overridepublic int getGroupCount() {return groups.length;}@Overridepublic int getChildrenCount(int i) {return childs[i].length;}@Overridepublic Object getGroup(int i) {return groups[i];}@Overridepublic Object getChild(int i, int i1) {return childs[i][i1]; //?}@Overridepublic long getGroupId(int i) {return i;}@Overridepublic long getChildId(int i, int i1) {return i1;}@Overridepublic boolean hasStableIds() {return true;}/*** 用于加載并顯示列表項(xiàng)元素。* @param groupPosition 為組位置* @param isExpanded 是否折疊或伸縮狀態(tài)* @param convertView 重用已經(jīng)的視圖對(duì)象* @param parent 返回視圖所衣服的視圖組。* @return*/@Overridepublic View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {TextView tv_grouptext;ImageView img_group;convertView= LayoutInflater.from(parent.getContext()).inflate(R.layout.expand_parent_item,parent,false);tv_grouptext=convertView.findViewById(R.id.parent_tv);img_group=convertView.findViewById(R.id.parent_img);tv_grouptext.setText(groups[groupPosition]);if(isExpanded)img_group.setImageResource(R.mipmap.down);elseimg_group.setImageResource(R.mipmap.right);return convertView;}/*** 重寫(xiě)getChildView()方法.* isLastChild:表示是否為最后一項(xiàng)列表數(shù)據(jù)。* @param groupPosition* @param childPosition* @param isLastChild* @param convertView* @param parent* @return*/@Overridepublic View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {//映射列表數(shù)據(jù)使用的布局文件convertView=LayoutInflater.from(parent.getContext()).inflate(R.layout.expand_children_item,parent,false);//獲取列表數(shù)據(jù)對(duì)應(yīng)的控件TextView tv_children_item=(TextView) convertView.findViewById(R.id.children_item);//顯示列表數(shù)據(jù)tv_children_item.setText(childs[groupPosition][childPosition]);return convertView;}@Overridepublic boolean isChildSelectable(int i, int i1) {return true;} }6.程序運(yùn)行效果
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-AIV9upcz-1634471942405)(asseits/image-20211008201729316.png)]
TextView tv_children_item=(TextView) convertView.findViewById(R.id.children_item);
//顯示列表數(shù)據(jù)
tv_children_item.setText(childs[groupPosition][childPosition]);
return convertView;
}
}
### 6.程序運(yùn)行效果總結(jié)
以上是生活随笔為你收集整理的工具栏,底部导航栏,可扩展列表视图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 江苏计算机考研院校
- 下一篇: 1024华为HDC值得拥有