表示する画面のxml:preference_version.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="web"
android:text="@string/test"
>
</TextView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:paddingTop="20dp"
android:text="@string/app_name"
>
</TextView>
<TextView
android:id="@+id/TextView_Preference_Version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:paddingTop="20dp"
>
</TextView>
</RelativeLayout>
</LinearLayout>
\res\xml\preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
>
<PackageName.VersionPreference
android:key="PreferenceScreen_Version"
android:layout="@layout/preference_version"ここがポイント
widgetLayoutを使うと適切に表示されない。
>
</PackageName.VersionPreference>
</PreferenceScreen>
PackageName.VersionPreference.java
public class VersionPreference extends Preference{
private Context con;
public VersionPreference(Context context){
super(context);
con = context;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public VersionPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
con = context;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public VersionPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
con = context;
}
public VersionPreference(Context context, AttributeSet attrs) {
super(context, attrs);
con = context;
}
@Override
protected void onBindView(View view){
super.onBindView(view);
LinearLayout llParent = (LinearLayout) view;
TextView tv = (TextView) llParent.findViewById(R.id.TextView_Preference_Version);
PackageInfo pi;
try{
pi = con.getPackageManager().getPackageInfo(
con.getPackageName(),
PackageManager.GET_ACTIVITIES
);
Resources r = con.getResources();
String s = r.getString(R.string.Version) + pi.versionName;
tv.setText(s);
}
catch(PackageManager.NameNotFoundException e){
}
}
}