如何在Android上为特定API级别添加属性?

时间:2016-10-05 20:19:30

标签: android android-studio-2.2

我的应用程序支持API级别19的所有Android版本。因此,在应用程序的一项活动中,名为About Activity,我有两个API级别的代码:发布API-21之前和之前(如截图链接如下)。

这是API级别21+的activity_about.xml的代码。正如您在此图像中看到的那样,操作栏上显示的名称是"简单天气" (应用程序的名称)。而且这里没有后退按钮,我需要很多。

About Activity for API Level 21+

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_about"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.a5corp.weather.AboutActivity">

<TextView
    android:text="TextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/appName"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="13dp"
    android:id="@+id/appIcon"
    android:textAppearance="@android:style/TextAppearance.Material.Large"
    android:textAlignment="center"
    android:textColor="#ffbb33"
    android:textSize="96sp" />

<TextView
    android:text="@string/app_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/appName"
    android:textAppearance="@android:style/TextAppearance.Material.Medium"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true" />

<TextView
    android:text="@string/source_code"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="62dp"
    android:id="@+id/sourceAt"
    android:textAppearance="@android:style/TextAppearance.Material.Large"
    android:layout_below="@+id/appName"
    android:layout_centerHorizontal="true" />

<TextView
    android:text="@string/dev_info"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="19dp"
    android:id="@+id/madeBy"
    android:textAppearance="@android:style/TextAppearance.Material.Medium"
    android:layout_alignTop="@+id/appName"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:id="@+id/verText" />

这是API级别21以下的activity_about.xml代码(仅表示级别19)。正如您在此图片中看到的那样,有一个后退按钮,操作栏上的名称是&#34;关于&#34;

About Activity For API Level 19

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_about"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.a5corp.weather.AboutActivity">

<TextView
    android:text="TextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/appName"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="13dp"
    android:id="@+id/appIcon"
    android:textSize="96sp"
    android:textAlignment="center"
    android:textColor="#ffbb33" />

<TextView
    android:text="@string/app_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/appName"
    android:textSize="18sp"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true" />

<TextView
    android:text="@string/source_code"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="62dp"
    android:id="@+id/sourceAt"
    android:textSize="22sp"
    android:layout_below="@+id/appName"
    android:layout_centerHorizontal="true"
    android:textColor="#000000" />

<TextView
    android:text="@string/dev_info"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="19dp"
    android:id="@+id/madeBy"
    android:layout_alignTop="@+id/appName"
    android:layout_centerHorizontal="true"
    android:textSize="18sp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:id="@+id/verText" />

我想为API Level 21+的activity_about.xml提供类似的功能。这有可能吗?

这是我的Android清单文件。

Manifest File

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.a5corp.weather">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/app_icon"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name="com.a5corp.weather.GlobalActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".AboutActivity"
        android:label="About"
        android:parentActivityName="com.a5corp.weather.WeatherActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.a5corp.weather.WeatherActivity" />
    </activity>
    <activity
        android:name=".WeatherActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait">
    </activity>
    <activity android:name=".FirstLaunch"
        android:label="Enter City"/>
</application>
</manifest>

谢谢你, Aaditya

1 个答案:

答案 0 :(得分:0)

如果您的AboutActivity继承自Activity,请尝试以下操作:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_about);

    android.app.ActionBar actionBar = getActionBar();
    if (actionBar != null) {
        actionBar.setTitle("my awesome title");
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

否则,如果您的AboutActivityAppCompatActivity的子类:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_about);

    android.support.v7.app.ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setTitle("my awesome title");
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

如果两者都不起作用(即ActionBar为空),则必须在布局和Activity中配置样式和功能,以便获得ActionBar。