工具栏,底部导航栏,可扩展列表视图
1.工具欄
這個概念,所接觸的很多開發軟件或工具,都會碰到。在手機開發的時候,可以進行導航、顯示相應的標題等,使開發者不至于在應用程序中迷路。5.0使用Actionbar來實現,很多公司都會對該類進行定制,使用起來更加靈活。5.0之后使用Toolbar來取代之前的Actionbar,這個更加強大。
1.1 Toolbar類
1.顯示程序所處的位置。
2.提供一些重要的交互功能,比如說搜索、跳轉等。
3.實現導航功能,例如返回按鈕等。
常用屬性和方法:
app:title setTitle(參數) 設置應用程序主題
app:subtitle setSubtitle(參數) 設置小標題
app:navigation setNavigation(int resId) 導航圖標
logo setLogo(Drawable drawable) 程序logo
titleTextColor setTitleTextColor(int color) 設置標題文字顏色
1.設計主界面.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.設計菜單xml文件
步驟:
在res上右擊,選擇“new/andorid Resource Directory”,在彈出的對話框中,設置ResourceType為Menu,Directory Name采用默認值,即可創建menu文件夾。
在menu上右擊,選擇“new/menu Resourcefile”,輸入文件名。
<?xml version="1.0" encoding="utf-8"?> <!--這里是以menu開頭的自定義標簽--> <menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><!-- 創建4個小選項;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="設置"android:id="@+id/item1"app:showAsAction="never"/><itemandroid:title="關于"android:id="@+id/item2"app:showAsAction="never"/> </menu>3.修改主界面后臺代碼
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);//導航加一個后退toolbar.setNavigationIcon(R.mipmap.houtui);toolbar.setTitle("首頁");toolbar.setTitleTextColor(Color.WHITE);//聲明菜單文件toolbar.inflateMenu(R.menu.base_toolbar_menu);} }2.底部導航欄
手機程序:QQ 拼夕夕 微信等,都會在程序下方放置導航。好處是可以進行單手操作,即用戶單手完成界面切換,從而查看不同的信息。
2.1 BottomNavigationView類
用到了Fragment的知識,每個item都有一個icon和一個title組成,單擊控制狀態即可。
通話(電話) 通信錄 設置
3.可擴展列表視圖
一般用于數據的展開和折疊這種場景,即可以單獨展開的列表視圖。
ExpandableListView,是ListView的子類。本質上是一個AdapterView,既然是AdapterView,在顯示數據的時候,就需要使用到適配器。適配器叫ExpandableAdapter,這個類派生于BaseExpandableListAdapter,需要重寫setOnGroupClickListener()、setOnChildClickListener()、setOnGroupCollpaseListener()、setOnGroupExpandListener()方法。
實例
展示河南省、陜西省行政區信息的實例。
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"> <!-- 主界面就是可擴展列表;android:groupIndicator="@null" 取值可以是任意的Drawable對象,不再顯示groupIndicator --><ExpandableListViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/expand_list"android:groupIndicator="@null"/></LinearLayout>2.父項列表內容
<?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"><!-- 設計列表項的布局 --><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.子項列表內容
<?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"><!-- 設計列表項的具體數據的布局--><TextViewandroid:layout_width="match_parent"android:layout_height="40dp"android:id="@+id/children_item"android:gravity="center_vertical"android:paddingLeft="10dp"/> </LinearLayout>4.主界面后臺代碼
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.變量 對象ExpandableListView expand_list_id;String[]groups={"河南省","陜西省"};String[][]childs={{"鄭州市","安陽市","駐馬店市"},{"西安市","咸陽市","寶雞市"}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//--------------------------------------initView();// 這個是自定義的方法}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);//監聽事件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;}});//監聽事件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;}});//監聽事件3expand_list_id.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {@Overridepublic void onGroupCollapse(int groupPosition) {Toast.makeText(MainActivity.this, "你收縮了"+groups[groupPosition], Toast.LENGTH_LONG).show();}});//監聽4expand_list_id.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {@Overridepublic void onGroupExpand(int groupPosition) {Toast.makeText(MainActivity.this, "你展開了"+groups[groupPosition], Toast.LENGTH_LONG).show();}});} }5.子項擴展代碼
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;//構造方法,和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;}/*** 用于加載并顯示列表項元素。* @param groupPosition 為組位置* @param isExpanded 是否折疊或伸縮狀態* @param convertView 重用已經的視圖對象* @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;}/*** 重寫getChildView()方法.* isLastChild:表示是否為最后一項列表數據。* @param groupPosition* @param childPosition* @param isLastChild* @param convertView* @param parent* @return*/@Overridepublic View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {//映射列表數據使用的布局文件convertView=LayoutInflater.from(parent.getContext()).inflate(R.layout.expand_children_item,parent,false);//獲取列表數據對應的控件TextView tv_children_item=(TextView) convertView.findViewById(R.id.children_item);//顯示列表數據tv_children_item.setText(childs[groupPosition][childPosition]);return convertView;}@Overridepublic boolean isChildSelectable(int i, int i1) {return true;} }6.程序運行效果
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-AIV9upcz-1634471942405)(asseits/image-20211008201729316.png)]
TextView tv_children_item=(TextView) convertView.findViewById(R.id.children_item);
//顯示列表數據
tv_children_item.setText(childs[groupPosition][childPosition]);
return convertView;
}
}
### 6.程序運行效果總結
以上是生活随笔為你收集整理的工具栏,底部导航栏,可扩展列表视图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 江苏计算机考研院校
- 下一篇: 1024华为HDC值得拥有