2012-08-29 70 views
4

我有這樣的代碼:) 而我想編輯我的自定義首選項佈局的文本屬性。 但是,從getView函數對對象所做的任何更改都不會影響首選項屏幕中的實際列表。有任何想法嗎?我知道我不能擴展PreferenceScreen,並且在這種情況下我不能使用任何其他類型的首選項,我只想能夠從我的代碼佈局中編輯自定義textview。Android優先活動getView

PreferenceScreen settings = getPreferenceManager().createPreferenceScreen(this); 

settings.setLayoutResource(R.layout.mypreference); 
View test = (View) settings.getView(null,getListView()); 

TextView text = (TextView)test.findViewById(R.id.text); 
text.setText("BLA BLA");  

回答

-2

我從來沒有真正與PreferenceActivity的意見搞砸,但這裏的東西怎麼辦?(通常爲ListPreferences)

ListPreference listPref; 
CheckBoxPreference cbPref; 

// Set the summary as the current listpref value 
listPref = (ListPreference) findPreference("list_pref_key"); 
listPref.setSummary(listPref.getEntry()); 

// change the title/summary/??? of any preference 
findPreference("anothe_pref_key").setTitle("New Title"); 
findPreference("anothe_pref_key").setSummary("New subtext for the view"); 

這樣一來,即使在使用PreferenceActivity/PreferenceFragment改變佈局未來的版本,你不必在你的代碼中改變任何東西。

+0

確定,但如何改變自定義元素,標題和摘要是默認的android方法的任何偏好,並有方法填充他們像settitle和setsummary,但如何edi t其他ID的? – ZZZ

+0

你想改變什麼樣的其他ID?因爲通常在偏好屏幕上,您只有標題和摘要 – XGouchet

+0

是的,而且我有我自己的由setLayoutResource設置的自定義佈局,在此佈局中除標題和摘要以外還有一些其他字段,將文本值設置爲xml中的textview正常工作,但我需要改變這個textview的字體,我不能通過xml – ZZZ

0

使用下面的自定義佈局:

custom_preferences_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <Button 
     android:id="@+id/preview_button" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:layout_marginBottom="20dp" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     android:text="@string/notification_preview" /> 
    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 

使用以上用戶偏好的XML文件中的文件,你可以這樣做訪問您的自定義佈局的項目:

public class CustomPreferenceActivity extends PreferenceActivity { 

    @Override 
    protected void onCreate(Bundle bundle){ 
     super.onCreate(bundle); 
     addPreferencesFromResource(R.xml.custom_preferences); 
     setContentView(R.layout.custom_preferences_layout); 
    } 

    private void initCustomizePreferences(){ 
     //Button 
     Button button = (Button)findViewById(R.id.preview_button); 
     //Do something with the button. 

    } 

} 

我希望這有助於:)

8

我們應該是使用getView(convertView, parent)但StackOverflow上無數懸而未決的問題,很明顯沒有人知道如何使用它。所以,我們唯一的選擇是創建一個自定義Preference

創建一個新的類別:

public class CustomPreference extends Preference { 
    public CustomPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

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

     View myView = rootView.findViewById(R.id.myViewId); 
     // do something with myView 
    } 
} 

在你xml/preferences.xml,添加自定義的偏好:

<your.package.name.CustomPreference 
    android:key="custom_preference" 
    android:layout="@layout/custom_layout" /> 
+1

我是唯一一個onBindView從不叫? – Virthuss