如何在首选项活动上显示应用版本?

时间:2015-08-07 09:58:04

标签: java android xml sharedpreferences preferenceactivity

我想添加一个我的应用版本,并可能在我的SettingsActivity上构建。

我试图展示一个"关于手机"我的应用上的样式活动。但我不知道如何去做。

我目前在我的preference.xml中使用EditTextPreference,它在Click上调用一个对话框,但我希望它像这样,onClick事件不会产生对话框。:

Nexus 5 screenshot

SettingsActivity.java

public class SettingsActivity extends PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    addPreferencesFromResource(R.xml.pref_general);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);

    LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent();
    Toolbar bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.tool_bar, root, false);
    root.addView(bar, 0); // insert at top
    bar.setTitle("Settings");
    bar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });
}

}

pref_general.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="Settings">

<PreferenceCategory android:title="About" >
    <EditTextPreference
        android:title="Version"
        android:summary="@string/app_version"
        android:key="prefUsername"/>
</PreferenceCategory>

还有一件事,是否有办法通过xml从gradle获取应用程序和构建号码。

我知道我的代码就像一个穴居人,我通常会在strings.xml中手动更新它们,但在我的辩护中,我是Android新手。

3 个答案:

答案 0 :(得分:12)

我最终得到了这个。

enter image description here

而不是扩展课程,而不是我用这个

SettingsActivity.java

public class SettingsActivity extends PreferenceActivity {

public static final String TAG = "caveman";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    addPreferencesFromResource(R.xml.pref_general);

    Preference pref = findPreference( "developer" );
    pref.setSummary("Marathon Apps");

    Preference pref1 = findPreference( "version" );
    try {
        pref1.setSummary(appVersion());
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);

    LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent();
    Toolbar bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.tool_bar, root, false);
    root.addView(bar, 0); // insert at top
    bar.setTitle("Prism");
    bar.setSubtitle("Settings");
    bar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });
}

public String appVersion() throws PackageManager.NameNotFoundException {
    PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
    String version = pInfo.versionName;
    return version;
}

}

pref_general.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="About">
<PreferenceScreen
    android:title="Developer"
    android:key="developer"
    android:summary="Marathon Apps">
</PreferenceScreen>

<PreferenceScreen
    android:title="Version"
    android:key="version"
    android:summary="1.0">
</PreferenceScreen>
</PreferenceCategory>


</PreferenceScreen>

答案 1 :(得分:1)

您可以创建自己的自定义Preference,覆盖onClick方法,使其不执行任何操作。如果您不想从头开始做所有事情,您甚至可以延长EditTextPreference

请记住在pref_general.xml文件中包含该类的完全限定名称。

答案 2 :(得分:1)

直接将版本名称获取到首选项xml,而无需从Java代码中读取

将此添加到gradle文件

OutputDebugString

这将注入带有versionName的字符串xml值

在首选项xml中,您只能获取价值

OutputDebugString

完整的gradle文件以供参考

 applicationVariants.all { variant ->
    variant.resValue "string", "versionName", variant.versionName }