Android主题:如何从AndroidManifest.xml中选择的主题中引用drawable?

时间:2014-01-06 01:02:32

标签: android xml android-layout android-actionbar themes

我正在将我的应用程序从自定义标题栏切换到ActionBar支持库,因为我喜欢ActionBar提供的功能,而我之前因为仅3.0+而避免使用它。我有一个很好的ActionBar工作,但我的应用程序在屏幕底部还有一个较低的栏,我想保持与顶部的ActionBar相同的外观。因为它看起来ActionBar使用图像背景(九个补丁PNG),而不是像我之前所做的那样定义颜色,我需要从我的布局xml访问动作栏底部可绘制的drawable,并将其用作我的底栏的背景。

我查看了支持v7库,找到了像@ drawable / abc_cab_background_bottom_holo_dark这样的drawable,并且输入的手动效果非常适合黑暗主题。但是,我想在AndroidManifest中指定的主题中自动拉出正确的drawable,无论是浅色还是深色主题。

以下是有问题的XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:background="@drawable/abc_ab_bottom_solid_light_holo">

并在AndroidManifest.xml中:

<application android:icon="@drawable/icon"
        android:allowBackup="true"
        android:label="@string/app_name"
        android:hardwareAccelerated="true"
        android:theme="@style/Theme.AppCompat.Light" >

我发现的所有内容都在讨论如何使用您自己的主题编辑ActionBar,但我想做相反的事情,使用基于股票appcompat主题的股票ActionBar drawable编辑我自己的栏。具体来说,我为android:background =引用当前主题的版本:

<item name="actionModeSplitBackground">@drawable/abc_cab_background_bottom_holo_dark</item>

如v7 / appcompat / res / values / themes_base.xml中所定义的那样?

1 个答案:

答案 0 :(得分:0)

来自我的ActionBar示例应用程序。

我正在以编程方式执行此操作:

XML部分:

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

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/bg_striped_img"
    android:tileMode="repeat"
    android:dither="true" />

在XML部分中,将drawable设置为图像源,然后在程序中使用XML作为BitampDrawable

OnCreate上的

//striped layout
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            BitmapDrawable bg = (BitmapDrawable)getResources().getDrawable(R.drawable.bg_striped);
            bg.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT);
            getSupportActionBar().setBackgroundDrawable(bg);

            BitmapDrawable bgSplit = (BitmapDrawable)getResources().getDrawable(R.drawable.bg_striped_split);
            bgSplit.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT);
            getSupportActionBar().setSplitBackgroundDrawable(bgSplit);
        }

修改 R.drawable.bg_stripedR.drawable.bg_striped_split

这两个都是你上面提到的XML文件,bg_striped是改变你的actionBar背景而bg_striped_split是改变你的Split菜单背景..