如何在首选项 Activity 上显示应用程序版本?
How to show app version on Preferences Activity?
我想添加一个我的应用程序版本并可能在我的 SettingsActivity 上构建。
我正在尝试在我的应用程序中显示 "About Phone" 样式 activity。但是我不知道怎么办。
我目前在我的 preference.xml 中使用 EditTextPreference,它在单击时调用对话框,但我希望它是这样的,其中 onClick 事件不产生对话框。:
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 的新手。
如果您不想从头开始,您可以创建自己的自定义 Preference, overriding the onClick method so that it does nothing. You can even extend the EditTextPreference。
记得在 pref_general.xml
文件中包含 class 的完全限定名称。
我结束了这个。
我没有扩展 类 之类的东西
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>
无需读取 java 代码
即可将版本名称直接获取到首选项 xml
将此添加到 gradle 文件
applicationVariants.all { variant ->
variant.resValue "string", "versionName", variant.versionName }
这将使用 versionName
注入字符串 xml 值
优先选择 xml 你可以获得价值
<Preference android:title="Version"
android:summary="@string/versionName">
</Preference>
完成gradle文件供参考
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.app"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
applicationVariants.all { variant ->
variant.resValue "string", "versionName", variant.versionName
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled = true
}
buildToolsVersion '28.0.3'
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
我想添加一个我的应用程序版本并可能在我的 SettingsActivity 上构建。
我正在尝试在我的应用程序中显示 "About Phone" 样式 activity。但是我不知道怎么办。
我目前在我的 preference.xml 中使用 EditTextPreference,它在单击时调用对话框,但我希望它是这样的,其中 onClick 事件不产生对话框。:
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 的新手。
如果您不想从头开始,您可以创建自己的自定义 Preference, overriding the onClick method so that it does nothing. You can even extend the EditTextPreference。
记得在 pref_general.xml
文件中包含 class 的完全限定名称。
我结束了这个。
我没有扩展 类 之类的东西
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>
无需读取 java 代码
即可将版本名称直接获取到首选项 xml将此添加到 gradle 文件
applicationVariants.all { variant ->
variant.resValue "string", "versionName", variant.versionName }
这将使用 versionName
注入字符串 xml 值优先选择 xml 你可以获得价值
<Preference android:title="Version"
android:summary="@string/versionName">
</Preference>
完成gradle文件供参考
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.app"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
applicationVariants.all { variant ->
variant.resValue "string", "versionName", variant.versionName
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled = true
}
buildToolsVersion '28.0.3'
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}