13

特に一部の言語では、長いタイトルのPreferenceScreenがあります。これで、CheckBoxPreferenceまたはListPreferenceに複数行のタイトルを設定できます: Android設定の概要。まとめて3行を設定する方法は?、しかし、PreferenceScreenに2行のタイトルを設定するにはどうすればよいですか?次のようにスタイルを変更できます:PreferenceScreenでフォントサイズを変更するにはどうすればよいですか?これは完全に見えず、設定スタイル(フォント、サイズ...)と矛盾しています。

ありがとう!

4

4 に答える 4

18

デフォルトでは、タイトルは1行に設定されています。Preferenceを拡張し、title textviewを取得して、1行をfalseに設定する必要があります。通常のPreferenceScreenの代わりにこのクラスを使用します。

public class TwoLinePreference extends Preference {

  public TwoLinePreference(Context ctx, AttributeSet attrs, int defStyle) {
    super(ctx, attrs, defStyle);
  }

  public TwoLinePreference(Context ctx, AttributeSet attrs) {
    super(ctx, attrs);
  }

  public TwoLinePreference(Context ctx) {
    super(ctx);
  }

 @Override
 protected void onBindView(View view) {
    super.onBindView(view);

    TextView textView = (TextView) view.findViewById(android.R.id.title);
    if (textView != null) {
        textView.setSingleLine(false);
      }
  }
}
于 2013-11-29T18:23:55.807 に答える
6

メソッドsetSingleLineTitle(false)を使用します

これはAPI26で追加されたため、古いデバイスのサポートライブラリバージョンを使用できるはずです。

于 2018-01-03T05:53:55.560 に答える
4

単一の設定のみが必要な場合は、setSingleLineTitleまたはapp:singleLineTitle="false"XMLファイルを使用します。

すべての設定に適用したい場合は、PreferenceFragmentCompatを拡張するときに、複数の方法で適用できます。

1.すべての設定を確認して設定します。

override fun setPreferenceScreen(preferenceScreen: PreferenceScreen?) {
    if (preferenceScreen != null)
        setAllPreferencesToHaveMultiLineTitles(preferenceScreen)
    super.setPreferenceScreen(preferenceScreen)
}

private fun setAllPreferencesToHaveMultiLineTitles(preference: Preference) {
    preference.isSingleLineTitle = false
    if (preference is PreferenceGroup)
        for (i in 0 until preference.preferenceCount)
            setAllPreferencesToHaveMultiLineTitles(preference.getPreference(i))
}

2.アダプターで同じことを行いますが、いつか機能しない可能性があるためお勧めしません(ライブラリの非表示のAPIに到達します):

override fun onCreateAdapter(preferenceScreen: PreferenceScreen?): RecyclerView.Adapter<*> {
    return object : PreferenceGroupAdapter(preferenceScreen) {
        @SuppressLint("RestrictedApi")
        override fun getItem(position: Int): Preference {
            val item = super.getItem(position)
            item.isSingleLineTitle = false
            return item
        }
    }
}

3.同様ですが、使用isSingleLineTitleしません(ただし、同じ理由でお勧めしません):

override fun onCreateAdapter(preferenceScreen: PreferenceScreen?): RecyclerView.Adapter<*> {
    return object : PreferenceGroupAdapter(preferenceScreen) {
        @SuppressLint("RestrictedApi")
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PreferenceViewHolder {
            val holder = super.onCreateViewHolder(parent, viewType)
            setPreferenceTitleTextViewToHaveMultipleLines(holder.itemView)
            return holder
        }
    }
}

fun setPreferenceTitleTextViewToHaveMultipleLines(v: View) {
    if (v is TextView && v.getId() == android.R.id.title)
        return v.setSingleLine(false)
    if (v is ViewGroup)
        for (i in 0 until v.childCount)
            setPreferenceTitleTextViewToHaveMultipleLines(v.getChildAt(i))
}
于 2019-04-17T09:49:35.867 に答える
0

androidx.prefereceライブラリのタイトルと概要には、デフォルトで1行がありません。

于 2021-03-02T11:24:28.410 に答える