安卓偏好设置摘要。如何在摘要中设置三行?

14

摘要偏好设置最多只允许显示两行。如果我想在摘要中显示三行或更多,该怎么做?


你正在使用TextView或其他函数来显示内容。 - Jeeva
2个回答

27

您可以通过扩展任何现有的偏好设置来创建您自己的Preference类:

public class LongSummaryCheckboxPreference extends CheckboxPreference
{
    public LongSummaryCheckboxPreference(Context ctx, AttributeSet attrs, int defStyle)
    {
        super(ctx, attrs, defStyle);        
    }

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

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

        TextView summary= (TextView)view.findViewById(android.R.id.summary);
        summary.setMaxLines(3);
    }       
}

然后在 preferences.xml 文件中:

 <com.your.package.name.LongSummaryCheckBoxPreference 
    android:key="@string/key"
    android:title="@string/title"
    android:summary="@string/summary" 
    ... />

缺点在于你需要为所需的所有首选项类型创建子类,以便得到3行摘要。


2
工作得很好,点赞!!如果您使用androidx.preference,可以使用onBindViewHolder代替onBindView - BlueBright
我还需要添加这个:summary.setSingleLine(false); - Ton

9
使用androidx.preference.PreferenceCategory我得到了以下内容:
Java:
public class LongSummaryPreferenceCategory extends PreferenceCategory {

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

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

    @Override
    public void onBindViewHolder(PreferenceViewHolder holder) {
        super.onBindViewHolder(holder);
        TextView summary= (TextView)holder.findViewById(android.R.id.summary);
        if (summary != null) {
            // Enable multiple line support
            summary.setSingleLine(false);
            summary.setMaxLines(10); // Just need to be high enough I guess
        }
    }
    
}

Kotlin:

class LongSummaryPreferenceCategory @JvmOverloads constructor(
  context: Context, 
  attrs: AttributeSet? = null
): PreferenceCategory(context, attrs) {

  override fun onBindViewHolder(holder: PreferenceViewHolder) {
    super.onBindViewHolder(holder)
    val summary = holder.findViewById(android.R.id.summary) as? TextView
    summary?.let {
      // Enable multiple line support
      summary.isSingleLine = false
      summary.maxLines = 10 // Just need to be high enough I guess
    }
  }
}

1
工作得很好,我已将其转换为 Kotlin 并添加了 Kotlin 版本 :) - MatPag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接