2012-08-09 13 views
14

about、contact、およびlegalのオプションを持つ設定画面を作成しようとしています。クリックするとblurbとiconが別のページに表示され、shared preferencesなどは表示されません。設定画面にテキストブロックが表示されます

テキストを表示するために階層の理解に問題があります。私はその流れを次のようにしたいと思っています:settings -> about -> the about text

現在、私にはカテゴリとオプションが与えられていますが、新しいテキストを表示するにはどうすればいいのかわかりません。

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

    <PreferenceCategory 
      android:title="Info"> 
     <Preference android:title="About"/> 


    </PreferenceCategory> 
... 
</PreferenceScreen> 

clickableをtextviewにするためにどのようなオプションを使用するかわかりません。

答えて

8

PreferenceScreenの中に書式設定されたテキストブロックを追加することはできません。それはそれが意図されたものではありません。ただし、別のアクティビティの中にAboutテキストを追加することもできます(LinearLayout、一部のフォーマットはTextViewで十分です)。好みの内側の意図を渡すことで、これを呼び出します。

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >  
    <Preference 
     android:key="about" 
     android:title="About">   
      <intent android:action="your.package.path.to.Activity"/>   
    </Preference> 
</PreferenceScreen> 
+0

あなたはこのより上で展開することはできますか?テキストブロックを表示するために、アクティビティの意図を呼び出さなければなりませんか? – Nick

+0

まあ、テキストブロック自体は、環境設定ページにあるものではありません。それについての要約を追加しない限り(唯一の書式なしのテキストが表示されます)、唯一の選択肢は、新しい活動を開くか、または設定ページではなく、別のものとして約ページを定義することです。 – Korcholis

+0

よろしくお願いします。クリックすると、タイトルと要約を使用して単一の意図でテキストを表示する別の設定に移動するように設定できますか?基本的に、基本設定画面の「バージョン情報」をクリックしたときに表示される別のXML設定ファイルを作成しますか? – Nick

22

私は同じ問題を抱えていた、と静的なテキストブロックを表示する必要がありました。私の場合、それは環境設定ページに並んでいましたが。

タグはリンクを許可しますが、静的テキストの必要性は解決しません。しかし、Preferenceタグ自体があります。テキスト、通常のタイトル行、テキストの要約を表示することができます。どちらもオプションで、次に選択不可にします。それは静的なテキストの錯覚を与えるでしょう。

<Preference 
    android:key="pref_static_field_key" 
    android:selectable="false" 
    android:title="you can omit the title" 
    android:summary="Multi line description\ncan go here."/> 
+0

注:Preferenceタグには、android:fragmentという属性もあります。この属性は、プリファレンスフラグメントにリンクしているようです。上記と組み合わせると、Aboutボックスに必要なものと思われます。 –

25

A.Grandtのソリューションは、好みの活動の中にテキストブロックの本当に素敵な模倣を与えますが、私は不必要にあなたのアプリの設定のためのSharedPreferencesファイルにこの「擬似好み」を格納し回避android:persistent="false"属性を、追加します。

要約すると、環境活動の中のTextViewの模倣A.Grandtは次のようになり示唆したように:

<Preference 
    android:key="pref_static_field_key" 
    android:selectable="false" 
    android:persistent="false" 
    android:title="you can omit the title" 
    android:summary="Multi line description\ncan go here."/> 

あなたは改行のため\nを使用することができ、まだそれは、基本設定項目自体のサイズを変更しないので、これらのマルチラインをする可能性があるが、まだ単一行の嗜好項目内に完全には見えない。

+0

この方法を使用すると、テキストブロックの値(要約)*をコード*に設定する方法はありますか? (使用例:設定画面の上部にアプリケーションのバージョン名を表示してください) – Jonik

+0

[これはかなり簡単に判明しました](http://stackoverflow.com/a/43371960/56285);コードで、プリファレンスを見つけ、そのサマリーを設定します。 – Jonik

3

私はテキストブロックを追加したいと考えましたが、はプログラムで実際のテキストコンテンツを設定しました。私の具体的な必要性:アプリのバージョン名を設定画面の上部に表示する。

私はそれをA.GrandtKrzysiekでアプローチし、コードで要約を設定しました。

dev_preferences.xml

<Preference 
    android:key="pref_app_version" 
    android:persistent="false" 
    android:selectable="false" 
    android:title="@string/app_name" /> 

嗜好断片(extends PreferenceFragment):

private static final String KEY_APP_VERSION = "pref_app_version"; 

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

     addPreferencesFromResource(R.xml.dev_preferences); 

     findPreference(KEY_APP_VERSION).setSummary(BuildConfig.VERSION_NAME); 
    } 

Iはまた、<Preference>エントリにandroid:layout="@layout/dev_preferences_header"を設定することにより、カスタムレイアウト(as in this answer)を使用してしまいました。(必須ではありませんが、この方法は、簡単に好み、「ヘッダ」のルックスをカスタマイズすることができます。)

dev_preferences_header.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"  
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:padding="@dimen/spacing_small"> 

    <TextView 
     android:id="@android:id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@android:id/summary" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@android:id/title" /> 

</RelativeLayout> 
関連する問題