2010-07-10 68 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> 

这里当我们执行代码时,它会显示一个自定义标题栏,其中有两个文本,当我们点击它时,它会进入下一个类(到您的目标类)。我们也可以改变颜色,尺寸字体等。并且还可以将按钮等添加到自定义标题栏中。