我将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>
答案 0 :(得分:1)
我设法让它工作 - 不确定这是否是最好/最干净的解决方案,但它确实有效。
必须做出以下更改:
制作ActionBarActivity的副本,让新类扩展PreferenceActivity
公共抽象类ActionBarPreferenceActivity扩展了PreferenceActivity { //内容与'ActionBarActivity'完全相同 }
稍微修改ActionBarHelperBase.java中的onCreate() - 为PreferenceActivity类创建一个特例
@覆盖 public void onCreate(Bundle savedInstanceState){ //如果活动是PreferenceActivity,请不要发出请求 if(!(mActivity instanceof PreferenceActivity)){ mActivity.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); }
让您的PreferenceActivity扩展此类并在调用super.onCreate()之前添加对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活动不同。
答案 1 :(得分: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>