Android專案中自定義頂部標題欄
實現功能:
1)定義標題欄佈局;
2)自定義TitleActivity控制標題欄按鈕監聽;
3)在TitleActivity中實現標題欄以下內容區域的切換;
4)新建Activity繼承TitleActivity,實現重用標題欄效果。
實現步驟:
1. 新建一個工程,命名為TitleActivityDemo,Activity命名為TitleActivity;
2. 實現如圖效果
分為:返回按鈕、返回鍵、標題、提交
3. 設定返回按鈕監聽,並toast;
1)設定左上角箭頭和返回文案區域點選事件的監聽,toast提示如圖文案;
2)設定提交文字的點選事件監聽並toast提示“我是提交按鈕”;
4). 實現標題欄下方內容區域;
5)編寫MainActivity類繼承TitleActivity,實現如圖整體邏輯。
效果圖:
功能程式碼:
1.首先定義標題欄 layout_title.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- 首先定義標題欄 --> <RelativeLayout android:id="@+id/biaoti" android:layout_width="match_parent" android:layout_height="58dp" android:background="#ed4255"> <TextView android:text="標題欄" android:id="@+id/text_title" android:textSize="21sp" android:textColor="#fff" android:gravity="center" android:singleLine="true" android:ellipsize="marquee" android:layout_width="match_parent" android:layout_height="match_parent" /> <Button android:id="@+id/button_backward" android:layout_width="70dp" android:layout_height="match_parent" android:drawableLeft="@drawable/back_arrow" android:drawablePadding="6dp" android:background="#ed4255" android:ellipsize="end" android:gravity="center" android:onClick="onClick" android:paddingLeft="5dp" android:singleLine="true" android:text="返回" android:textColor="#ffffffff" android:textSize="18dp" android:visibility="invisible" /> <Button android:id="@+id/button_forward" android:layout_width="70dp" android:layout_height="match_parent" android:layout_alignParentRight="true" android:drawablePadding="6dp" android:background="#ed4255" android:ellipsize="end" android:gravity="center" android:onClick="onClick" android:paddingLeft="5dp" android:singleLine="true" android:text="提交" android:textColor="#ffffffff" android:textSize="18dp" android:visibility="invisible" /> </RelativeLayout> <TextView android:text="Android" android:textSize="28sp" android:gravity="center" android:layout_below="@+id/biaoti" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
2.activity_title.xml 定義介面的標題欄和標題欄以下內容的佈局,此處使用<include>
標籤引入標題欄,且下方有定義一個空的FrameLayout的佈局。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 定義介面的標題欄和標題欄以下內容的佈局 此處使用<include>標籤引入標題欄,且下方有定義一個空的FrameLayout的佈局。 --> <include layout="@layout/layout_title"></include> <FrameLayout android:background="#fff" android:id="@+id/layout_content" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout> </LinearLayout>
3.TitleActivity.java 定義TitleActivity佈局以及按鈕
package com.bwie.title; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.FrameLayout; import android.widget.TextView; import android.widget.Toast; /** * 1)定義標題欄佈局; * 2)自定義TitleActivity控制標題欄按鈕監聽; * 3)在TitleActivity中實現標題欄以下內容區域的切換; */ public class TitleActivity extends Activity implements View.OnClickListener { //private RelativeLayout mLayoutTitleBar; private TextView mTitleTextView; private Button mBackwardbButton; private Button mForwardButton; private FrameLayout mContentLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupViews(); //載入 activity_title 佈局 ,並獲取標題及兩側按鈕 } private void setupViews() { super.setContentView(R.layout.activity_title); mTitleTextView = (TextView) findViewById(R.id.text_title); mContentLayout = (FrameLayout) findViewById(R.id.layout_content); mBackwardbButton = (Button) findViewById(R.id.button_backward); mForwardButton = (Button) findViewById(R.id.button_forward); } /** * 是否顯示返回按鈕 * * @param backwardResid 文字 * @param show true則顯示 */ protected void showBackwardView(int backwardResid, boolean show) { if (mBackwardbButton != null) { if (show) { mBackwardbButton.setText(backwardResid); mBackwardbButton.setVisibility(View.VISIBLE); } else { mBackwardbButton.setVisibility(View.INVISIBLE); } } // else ignored } /** * 提供是否顯示提交按鈕 * * @param forwardResId 文字 * @param show true則顯示 */ protected void showForwardView(int forwardResId, boolean show) { if (mForwardButton != null) { if (show) { mForwardButton.setVisibility(View.VISIBLE); mForwardButton.setText(forwardResId); } else { mForwardButton.setVisibility(View.INVISIBLE); } } // else ignored } /** * 返回按鈕點選後觸發 * @param backwardView */ protected void onBackward(View backwardView) { Toast.makeText(this, "點選返回,可在此處呼叫finish()", Toast.LENGTH_SHORT).show(); //finish(); } /** * 提交按鈕點選後觸發 * * @param forwardView */ protected void onForward(View forwardView) { Toast.makeText(this, "我是提交按鈕", Toast.LENGTH_SHORT).show(); } //設定標題內容 @Override public void setTitle(int titleId) { mTitleTextView.setText(titleId); } //設定標題內容 @Override public void setTitle(CharSequence title) { mTitleTextView.setText(title); } //設定標題文字顏色 @Override public void setTitleColor(int textColor) { mTitleTextView.setTextColor(textColor); } //取出FrameLayout並呼叫父類removeAllViews()方法 @Override public void setContentView(int layoutResID) { mContentLayout.removeAllViews(); View.inflate(this, layoutResID, mContentLayout); onContentChanged(); } @Override public void setContentView(View view) { mContentLayout.removeAllViews(); mContentLayout.addView(view); onContentChanged(); } /* (non-Javadoc) * @see android.app.Activity#setContentView(android.view.View, android.view.ViewGroup.LayoutParams) */ @Override public void setContentView(View view, ViewGroup.LayoutParams params) { mContentLayout.removeAllViews(); mContentLayout.addView(view, params); onContentChanged(); } /* (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) * 按鈕點選呼叫的方法 */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.button_backward: onBackward(v); break; case R.id.button_forward: onForward(v); break; default: break; } } }
4. MainActivity中呼叫時直接 extends TitleActivity,使用在TitleActivity中定義的方法
package com.bwie.title; import android.os.Bundle; /** * MainActivity中呼叫時直接 extends TitleActivity,使用在TitleActivity中定義的方法 */ public class MainActivity extends TitleActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setTitle("標題欄"); showBackwardView(R.string.text_back,true); showForwardView(R.string.text_forward,true); } }
5. 在string.xml中寫入以下程式碼:
<resources> <string name="text_back">返回</string> <string name="text_forward">提交</string> </resources>
6.佈局中需要引用的左箭頭圖片
圖片
相關文章
- Android studio | 去除頂部標題欄Android
- Qt隱藏系統標題欄,使用自定義標題欄QT
- HarmonyOS NEXT 5.0自定義增強版導航欄元件|鴻蒙ArkUI自定義標題欄元件鴻蒙UI
- uni-app動態修改頂部導航欄標題APP
- 視訊直播系統原始碼,頂部標題欄的隱藏和標題修改原始碼
- android自定義View——座標系AndroidView
- 直播平臺軟體開發,實現自定義標題欄
- 短視訊商城原始碼,頂部標題欄的設定和更改原始碼
- iOS系統導航欄自定義標題動畫跳變解析iOS動畫
- app直播原始碼,uniapp之自定義頂部樣式APP原始碼
- 建立自定義專案模板
- Android中取消系統標題欄的幾種方式Android
- flutter 自定義tab導航-頂部導航-底部導航Flutter
- .NET Core - 自定義專案模板
- vscode 自定義c++標頭檔案,編譯過程中遇到的問題VSCodeC++編譯
- 自定義 ActionBar 標題與選單中的文字樣式
- Android中自定義Toast文字大小AndroidAST
- 在vue專案中自定義事件匯流排eventHubVue事件
- vscode 關閉頂部搜尋欄VSCode
- 自定義Vue-cli專案模板Vue
- 五、自定義Zabbix監控專案
- VS2019 自定義專案模板
- uniapp自定義導航欄APP
- Android 專案中 shape 標籤的整理和思考Android
- 聊聊自定義SPI如何使用自定義標籤注入到spring容器中Spring
- 短視訊帶貨原始碼,android 自定義常駐通知欄原始碼Android
- android 自定義狀態列和導航欄分析與實現Android
- Android 通知欄顯示自定義通知時設定更高的高度Android
- django admin中增加自定義超連結欄位Django
- android自定義view(自定義數字鍵盤)AndroidView
- 專案需求討論-自定義滾輪
- Android 自定義UI元件AndroidUI元件
- android 自定義鍵盤Android
- Android自定義View整合AndroidView
- Android自定義遮罩層Android遮罩
- 自定義Android鍵盤Android
- Android自定義OnTouch事件Android事件
- Prometheus自定義指標Prometheus指標
- spring 自定義標籤Spring