2010-07-10 29 views
6

如何使用androids默認窗口標題樣式來創建自己的類似TextView在Android上創建自定義標題視圖

我做了很多猜測,並使TextView擁有默認標題欄所具有的一切,除了文本陰影(以及一些填充/邊距等,我認爲)。

這裏的基本上就是我已經試過:

MainUI.xml

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 

    setContentView(R.layout.main); 

    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar); 
} 

title_bar.xml

<?xml version="1.0" encoding="utf-8"?> 

<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/myTitle" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:textAppearance="@android:style/TextAppearance.WindowTitle" 
    android:background="@android:drawable/title_bar" 
    android:text="This is my new title" /> 

編輯:

我發現了一些有趣的相關文章在makemachineanddev

儘管我不喜歡它,但我從實施style.xml中複製了一些屬性。

有沒有辦法避免以這種靜態方式複製屬性?

以下渲染幾乎完美,其實不同之處在於原來做了「剪切」的第一個2-3像素的標題陰影,而我的TextView沒有。

<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/myTitle" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:gravity="center_vertical" 
    android:shadowColor="#BB000000" 
    android:shadowRadius="2.75" 
    android:singleLine="true" 
    android:textAppearance="@android:style/TextAppearance.WindowTitle" 
    android:background="@android:drawable/title_bar" 
    android:text="This is my new title" /> 

這也是很重要的替代默認的Android:windowTitleBackgroundStyle用透明色,因爲默認包括一些填充等,你不希望被包裹你的自定義標題欄。

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="CustomTheme" parent="android:Theme"> 
    <item name="android:windowTitleBackgroundStyle">@android:color/transparent</item> 
    </style> 
</resources> 

記住啓用主題在你的AndroidManifest.xml

+0

我不明白你想要做什麼。你是否願意複製Android製作的默認標題欄? – Macarse 2010-07-11 01:42:12

+0

是的,只要我可以修改它。我希望標題欄也可以用作進度條:-) – Steinbitglis 2010-07-11 07:27:21

+1

不知道這是否有用,但[RomManager](https://market.android.com/details?id=com.koushikdutta.rommanager&hl= en)在你下載ROM時會這樣做,標題欄在加載時從左到右填充灰色。如果你在運行Hierarchy viewer時運行它,你可以看到他們有進度條和進度圈。 – 2011-06-03 20:22:12

回答

0

試試這個,它的工作對我來說:

到位的代碼的其餘部分..

super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
    setContentView(R.layout.main); 
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.main_header); 
    TextView home = (TextView) findViewById(R.id.home); 
     if (home != null) { 
      /* your code here */ 
      home.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // the action that u want to perform 
       Menu.this.finish(); 
       Intent i= new Intent(Main.this,Destination.class); 
       startActivity(i); 
      } 
     }); 
     } 

創建main_header佈局文件

<?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:orientation="vertical" > 


    <RelativeLayout 
     android:id="@+id/relativeLayout1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:text="Main Menu" 
      android:textStyle="bold" 
      android:textSize="10pt" /> 

     <TextView 
      android:id="@+id/home" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignBaseline="@+id/textView1" 
      android:layout_alignBottom="@+id/textView1" 
      android:layout_alignParentRight="true" 
      android:textStyle="bold" 
      android:text="Home" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

    </RelativeLayout> 

</LinearLayout> 

這裏當我們執行代碼時,它會顯示一個自定義標題欄,其中有兩個文本,當我們點擊它時,它會進入下一個類(到您的目標類)。我們也可以改變顏色,尺寸字體等。並且還可以將按鈕等添加到自定義標題欄中。