从默认视图上创建自定义标题视图(Android)

6

如何使用Android默认的窗口标题样式来制作类似的 TextView

我猜了很多次,做了一个拥有默认标题栏所有元素的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中启用主题


我不明白你想做什么。你愿意复制Android制作的默认标题栏吗? - Macarse
是的,只要我可以修改它。我希望标题栏也能作为进度条使用 :-) - Steinbitglis
1
不知道这是否有帮助,但是RomManager在下载ROM时会在标题栏中从左到右填充灰色以表示正在加载。如果你在运行Hierarchy Viewer的同时运行它,你可以看到他们有进度条和圆形进度条的东西。 - dylan murphy
1个回答

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>

在这里,当我们执行代码时,它将显示一个自定义标题栏,其中有两个文本,并且当我们单击它时,它将转到下一个类(到您的目标类)。我们还可以更改颜色、大小、字体等等,并且还可以向自定义标题栏添加按钮等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接