简体   繁体   中英

How to add a property for a specific API level on Android?

my app supports all android versions from API Level 19. So, in one of the app's activity, called About Activity, I have code for two API Levels : post API-21 and before that (as seen in screenshot links below).

This is the code of activity_about.xml for API level 21+. As you can see in this image, the name shown on the action bar is "Simple Weather" (name of the app). And also there is no back button here, which I need a lot.

关于API级别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" />

This is the code of activity_about.xml for API Level below 21 (that means only level 19). As you can see in this image, there is a back button, and the name on the action bar is "About"

关于API级别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" />

I want to have something like this for activity_about.xml for API Level 21+ as well. Can this be possible?

Here's my 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>

Thank you, Aaditya

If your AboutActivity inherits from Activity , try this:

@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);
}

Or else, if your AboutActivity is a subclass of AppCompatActivity :

@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);
}

If neither works (ie ActionBar is null), you'll have to configure the styles and features in your layout and Activity so you can obtain an ActionBar.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM