我将片段转换为对话框,现在文本颜色已经改变

时间:2014-08-01 02:13:05

标签: android android-layout android-fragments android-preferences android-dialog

这是我的第一个应用。我一直在一个活动中设置一个偏好(带有一个片段),但我想将片段移动到DialogPreference。它迁移好了,除了我的文字颜色变得奇怪。见图。文字应该是黑色,而不是白色和灰色。知道我错了什么吗?

(抱歉,我知道这是非常草率的代码)

现在看起来如何: enter image description here

我的xml ......

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/relLay_dialog_semester_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <TextView
        android:id="@+id/select_semester_prompt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/select_semester_prompt" />

    <LinearLayout
        android:id="@+id/linLayGradeSum"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/select_semester_prompt"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp" >

        <Spinner
            android:id="@+id/semester_spinner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:hint="@string/hint_editSemester" />

        <Spinner
            android:id="@+id/year_spinner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="4" />
    </LinearLayout>

    <TextView
        android:id="@+id/active_semesters_str"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/linLayGradeSum"
        android:layout_below="@+id/linLayGradeSum"
        android:text="@string/active_semester_str"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <LinearLayout
        android:id="@+id/active_semesters_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/active_semesters_str"
        android:layout_below="@+id/active_semesters_str"
        android:layout_marginTop="10dp"
        android:orientation="vertical" >


    </LinearLayout>

</RelativeLayout>

我的扩展DialogPreference类

public class SemesterDialogPreference extends DialogPreference {


SharedPreferences settings;
public static int YEAR_DEFAULT_VALUE = Activity_AddCourse.thisYear - Activity_AddCourse.baseYear;
public static int SEASON_DEFAULT_VALUE = Semester.getDefaultSemester().getSeasonInt();
public static int SEMESTER_DEFAULT_ID = 1;

String semester_id_key;

DBAdapter db;

// this is where I do everything view-related
@Override
public void onBindDialogView(View view){

        settings = getSharedPreferences();

        int curSemesterId = settings.getInt(semester_id_key, 1);

        db = new DBAdapter(this.getContext().getApplicationContext());
        db.open();
        Semester curSemester = db.getSemester(curSemesterId);
        db.close();

        ArrayList<String> years = new ArrayList<String>();
        for (int i = Activity_AddCourse.baseYear; i <= Activity_AddCourse.maxYear; i++)
        {
            years.add(Integer.toString(i));
        }
        ArrayAdapter<String> adapter_year = new ArrayAdapter<String>(this.getContext().getApplicationContext(),
                android.R.layout.simple_spinner_item, years);

        Spinner spinYear = (Spinner)view.findViewById(R.id.year_spinner);
        adapter_year.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinYear.setAdapter(adapter_year);
        spinYear.setSelection(curSemester.getYear() - Activity_AddCourse.baseYear);

        Spinner spinner = (Spinner) view.findViewById(R.id.semester_spinner);
         ArrayAdapter<CharSequence> adapter_spinner = ArrayAdapter.createFromResource(this.getContext().getApplicationContext(),
         R.array.semester_spinner, android.R.layout.simple_spinner_item);
         adapter_spinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
         spinner.setAdapter(adapter_spinner);
         spinner.setSelection(Semester.seasonStringToInt(curSemester.getSeason()));


         db = new DBAdapter(this.getContext().getApplicationContext());
         db.open();
         Semester[] s = db.getAllSemesters();
         db.close();
         String activeSem;
         LinearLayout semesterList = (LinearLayout) view.findViewById(R.id.active_semesters_list);
         if(s != null){ 
             for(int i = 0; i < s.length; i++){
                 activeSem = s[i].getSemesterString();
                 TextView tv = (TextView) new TextView(this.getContext().getApplicationContext());
                 tv.setText(activeSem);
                 semesterList.addView(tv);
                 System.out.println(s[i].getSemesterString());
             }
        }


        super.onBindDialogView(view);
}


public SemesterDialogPreference(Context context, AttributeSet attrs) {
    super(context, attrs);
    setDialogLayoutResource(R.layout.dialog_set_semester);

}

@Override
protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);
    persistBoolean(positiveResult);
}
}

更新: DialogPreference从我的设置活动中弹出,如下所示。

public class SettingsActivity extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.settings);

    }
}

此外,我可以通过为他们制作我自己的xml布局来将微调器文本变为黑色,就像Huy Tran建议的那样。但是,我必须为每个spinner_item和spinner_dropdown_item创建一个。见下文。

ArrayAdapter<String> adapter_year = new ArrayAdapter<String>(this.getContext().getApplicationContext(),
                    R.layout.my_spinner_item, years);
            Spinner spinYear = (Spinner)view.findViewById(R.id.year_spinner);
            adapter_year.setDropDownViewResource(R.layout.my_spinner_dropdown_item);

为什么我要这样做?我不知道。此外,下拉项目现在每个约高50%。我将exactly from source code复制到我自己的xml中,它仍然以不同的方式呈现。非常奇怪。

1 个答案:

答案 0 :(得分:1)

创建如下所示的布局,并在setDropDownViewResource而不是android.R.layout.simple_spinner_dropdown_item中使用该布局。

res/layout中创建 my_spinner_dropdown_item.xml

<强>编辑:

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    style="?android:attr/spinnerDropDownItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:textColor="@color/black"
    />

<强> my_spinner_item

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
        style="?android:attr/spinnerItemStyle"
    android:singleLine="true"
    android:textColor="@android:color/transparent"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee" />

尝试使用保证金来更改每个项目的大小。

然后在 SemesterDialogPreference

setDropDownViewResource(R.layout.my_spinner_dropdown_item);