2

我将 SherlockPreferenceActivity 用于 xml 文件中的 Preference 活动。下面的代码:

public class Setting extends SherlockPreferenceActivity
{
protected void onCreate(Bundle paramBundle)
{
  super.onCreate(paramBundle);
  addPreferencesFromResource(R.xml.setting);
}

一切正常,但我需要左右边距为 0dip(下图) 在此处输入图像描述

我曾尝试在 ABS 源代码中查找,但未能自定义它。有人以前做过吗?

更新:我上传了更多细节图片 在此处输入图像描述

setting.xml 内容:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory android:title="@string/system_setting" >
        <CheckBoxPreference
            android:defaultValue="true"
            android:key="mode_on_off"
            android:summaryOff="Sub Setting 1"
            android:summaryOn="Sub Setting 1 On"
            android:title="Setting 1" />
        <CheckBoxPreference
            android:defaultValue="true"
            android:key="filter_on_off"
            android:summaryOff="Sub Setting 2"
            android:summaryOn="Sub Setting 2 On"
            android:title="Setting 2" />
        <CheckBoxPreference
            android:defaultValue="false"
            android:key="screen"
            android:summaryOff="Sub Setting 3"
            android:summaryOn="Sub Setting 3 on"
            android:title="Setting 2" />

    </PreferenceCategory>
</PreferenceScreen>
4

2 回答 2

1

我设法让它工作 - 不确定这是否是最好/最干净的解决方案,但它有效。

不得不进行以下更改:

  1. 制作 ActionBarActivity 的副本并让新类扩展 PreferenceActivity

    public abstract class ActionBarPreferenceActivity extends PreferenceActivity { // 内容与 'ActionBarActivity' 完全一样 }

  2. 稍微修改 ActionBarHelperBase.java 中的 onCreate() - 为 PreferenceActivity 类做一个特例

    @Override public void onCreate(Bundle savedInstanceState) { // 如果 Activity 是 PreferenceActivity,则不发出请求 if (!(mActivity instanceof PreferenceActivity)) { mActivity.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); }

  3. 在调用 super.onCreate() 之前,让您的 PreferenceActivity 扩展此类并添加对 FEATURE_CUSTOM_TITLE 的请求

公共类 MyPreferenceActivity 扩展 ActionBarPreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); // add this line
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);
    // etc etc
}

// etc etc

据我所知,需要更改 2 和 3,因为对于 PreferenceActivity:

“只要你调用 super.onCreate(),ViewGroup 就会被设置,所以你不能改变 Window 的参数。” (见奥利弗对答案的评论)

我猜 PreferenceActivity 活动中组件的创建顺序与普通的 Activity 活动不同。

于 2013-05-09T12:22:25.650 回答
0

使用这种方式:

在此处输入图像描述

在活动中:

import android.os.Bundle;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockPreferenceActivity;

public class MainActivity extends SherlockPreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // setContentView(R.layout.custom_infowindow);
        final ActionBar actionBar = getSupportActionBar();
        actionBar.setCustomView(R.layout.custom_infowindow);
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setDisplayShowCustomEnabled(true);
        actionBar.setDisplayUseLogoEnabled(false);
        actionBar.setDisplayShowHomeEnabled(false);

        addPreferencesFromResource(R.xml.test);
    }

}

custom_infowindow.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Right Now Event"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="#FF0000" />

    <View
        android:layout_width="match_parent"
        android:layout_height="5dp"
        android:background="@color/_blue" />

</LinearLayout>
于 2013-05-09T12:31:21.450 回答