androidtitlebar自定義
① 怎麼自定義Android標題欄修改TitleBar的布局
Android程序默認的Activity標題欄只能顯示一段文字,而且不能改變它的布局、顏色、標題欄的高度等。如果想要在標題欄加上個圖標、button、輸入框、進度條、修改標題欄顏色等,只能使用自定義的標題欄。自定義標題欄可以通過在onCreate函數中添加以下代碼來實現,需要注意的是代碼的順序必須按照下面的樣式,否則將無效。
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.mainactivity); //Activity的布局
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.titlebar); //標題欄的布局
雖然上面這樣可以在標題欄加入一些控制項,但是仍然不能改變標題欄的高度、背景色,要想達到這個目的,只能使用theme(主題)。因此往project里先添加一個style。改變背景色修改android:windowTitleBackgroundStyle的值,改變標題欄高度則修改android:windowTitleSize的值。下面是一個示例:
接著再修改AndroidManifest.xml文件,找到要自定義標題欄的Activity,添加上android:theme值,比如:
java代碼
android:theme值就是上面那個style.xml文件里定義的一個style的name值。
按照以上的步驟,修改標題欄布局、高度、背景色的功能就實現了。
② 如何在Android中實現分享功能
分享功能有很多可以使用別人開發好的SDK,還有一種最簡單的方法是titlebar上顯示分享,也就是在menu下添加如下代碼能實現分享功能:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_share"
android:actionProviderClass="android.widget.ShareActionProvider"
android:showAsAction="ifRoom"
android:title="分享"/>
</menu>
③ Android去除狀態欄的方法匯總
一、隱藏標題欄
//隱藏標題欄
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
二、隱藏狀態欄
//隱藏狀態欄
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
三、去掉所有Activity界面的標題欄
修改AndroidManifest.xml
在application 標簽中添加android:theme="@android:style/Theme.NoTitleBar"
四、去掉所有Activity界面的TitleBar 和StatusBar
修改AndroidManifest.xml
在application 標簽中添加
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
④ android標題欄高度是多少
1、獲取標題欄高度: getWindow().findViewById(Window.ID_ANDROID_CONTENT)這個方法獲取到的view就是程序不包括標題欄的部分,然後就可以知道標題欄的高度了。
1
2
3
int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
//statusBarHeight是上面所求的狀態欄的高度
int titleBarHeight = contentTop - statusBarHeight
擴展:
1、獲取狀態欄高度:
decorView是window中的最頂層view,可以從window中獲取到decorView,然後decorView有個getWindowVisibleDisplayFrame方法可以獲取到程序顯示的區域,包括標題欄,但不包括狀態欄。於是,我們就可以算出狀態欄的高度了。
1
2
3
Rect frame = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top;
2、獲取屏幕高度
1
2
3
4
5
方法1:
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();
1
2
3
4
5
方法2:
DisplayMetrics dm = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(dm);//this指當前activity
screenWidth =dm.widthPixels;
screenHeight =dm.heightPixels;
⑤ android中include和merge標記的區別和使用
include和merge標記的作用主要是為了解決layout的重用問題。
比如我們有三四個Activity但是他們都要用到同一個樣式的標題欄,雖然我們把一樣的代碼個三四遍也沒關系,但實在是太丑了,而且效率太低,如果這個標題欄要改樣式,你豈不是要去三四個地方分別改動。
為了解決這個問題,android中有了include和merge標記
以下為標題欄的layout文件titlebar.xml 我們將使用Include標記重用這個文件
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width=」match_parent」
android:layout_height="wrap_content"
android:background="@color/titlebar_bg">
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/gafricalogo" />
</FrameLayout>
那麼在那三四個activity中你可以適用Include標記
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width=」match_parent」
android:layout_height=」match_parent」
android:gravity="center_horizontal">
<include layout="@layout/titlebar"/>
<TextView android:layout_width=」match_parent」
android:layout_height="wrap_content"
android:text="@string/hello" />
...
</LinearLayout>
調用了Include之後,titlebar文件的內容就被完全嵌入到了include所指定的位置。而且你還可以在include中重新更改一些屬性的值,比如
<include android:id=」@+id/news_title」
android:layout_width=」match_parent」
android:layout_height=」match_parent」
layout="@layout/title"/>
原來layout中的wrap_content屬性就被改成了match_parent屬性
再來說一下merge標記
上面的include有一個副作用就是他多套了一層root節點FrameLayout ,使得再構圖的時候會多花費一點時間
如果你不能容忍這個的話那你可以試一下merge標記
titlebar2.xml
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/gafricalogo" />
</merge>
這樣行成的titlebar2文件就少了外層的root節點,merge標記可以直接成為root節點,當titlebar2被include到文件中時,merge標記就會被忽略掉,而直接由裡面的ImageView取代原來include的位置。避免了冗餘的layout。
所以include和merge是配合使用的,不是一個互斥的或者說是平級的關系。
再來說一個在使用這兩個標簽時最容易出現的問題。
經常會有同學在RelativeLayout中使用include標簽
但是卻發現include進來的控制項無法用layout_alignParentBottom="true"之類的標簽來調整。這個真的非常惱火。其實解決方法非常簡單,只要你在include的時候同時重載下layout_width和layout_height這兩個標簽就可以了。如果不重載,任何針對include的layout調整都是無效的!
⑥ android 多個頁面怎麼共用同一組件
自定義組件就行。如果覺得還不好就創建一個mole。
關於自定義組件的實例,請參考android學習手冊,android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,圖標上有貝殼
.多個Activity共用相同布局或者相同控制項:避免重復代碼;
BaseActivit代碼:
{
/*
* 多個Activity共用相同布局或者相同控制項
* 寫個基類繼承,避免重復代碼
*/
@Override
publicvoidonClick(View v)
{
switch(v.getId())
{
caseR.id.common_titlebar_btn_back:
finish();
break;
default:
break;
}
baseOnClick(v);
}
protectedvoidbaseOnClick(View v)
{
}
@Override
protectedvoidonCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_base);
}
@Override
protectedvoidonResume()
{
super.onResume();
onPostOnCreate();
}
publicfinalvoidonPostOnCreate()//find同一個控制項
{
findViewById(R.id.common_titlebar_btn_back).setOnClickListener(this);
}
@Override
(Menu menu)
{
getMenuInflater().inflate(R.menu.base, menu);
returntrue;
}
}
子類代碼:
{
/**
* layout里復用同一布局:
* < include
* android:id="@+id/include1"
* layout="@layout/common_titlebar" />
*/
@Override
protectedvoidonCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third_main);
}
}
⑦ Android開發問題怎麼解決
R.java消失或解析異常
自定義title欄
SQLite isFirst和isBeforeFirst方法的區別
eclipse刪除空行
getX()和getRawX()的區別
imagView居中顯示問題
synchronized引發了 java.util.
獲取隨機顏色
去掉Activity的標題欄,全屏顯示
如何修改應用名稱及應用圖標
關於調試方法
Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
android.content.res.Resources.loadXmlResourceParser
android.content.res.Resources$NotFoundException
交互性的button定義的方法
在超級終端中執行程序報錯-Permission deny
從svn導入工程項目有驚嘆號
從svn導入工程項目有驚嘆號
首次進入帶有EditText的Activity不自動彈出軟鍵盤,再次點擊才彈
Gallery中OnItemClickListener與OnItemSelectedListener的區別
Eclipse中簽名導出apk崩潰,手動簽名
android.view.InflateException: Binary XML file line #異常的解決
判斷是否有root許可權
最簡單的Root 模擬器的方法
新版ADT開啟eclipse提示 "Running Android Lint" has encountered a problem
新版ADT開啟eclipse提示cannot open libstdc++.so.6..
無法升級ADT