2012-09-09 26 views
0

當我從XML創建TextView時,所有文本都是黑色的,但是當我從代碼執行代碼時它是灰色的。爲什麼?來自XML和來自代碼差異的TextView

代碼和XML元素的位置是相同的:主佈局是RelativeLayout(始終來自XML)。

下面的所有元素都是在XML中創建的,第二個是從代碼創建的:ScrollView - > TableLayout - > TableRow - > TextView。

在這兩種情況下,在所有層次結構中,我沒有設置顏色/樣式/裝飾參數。

代碼:

RelativeLayout layout = (RelativeLayout) findViewById(R.id.o_layout); 
ScrollView sv = new ScrollView(getApplicationContext()); 
TableLayout tl = new TableLayout(getApplicationContext()); 
float density = getResources().getDisplayMetrics().density; 
tl.setPadding((int)(10 * density), (int)(4 * density), (int)(4 * density), 0); 
for(String s: lista){ 
    add_row(tl, s); 
} 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
params.addRule(RelativeLayout.BELOW, R.id.osobowe_search_field); 
params.addRule(RelativeLayout.CENTER_HORIZONTAL); 
sv.addView(tl); 
layout.addView(sv, params); 

private void add_row(TableLayout tl, String left_text){ 
    float density = getResources().getDisplayMetrics().density; 

    TableRow tr = new TableRow(getApplicationContext()); 
    tr.setMinimumHeight((int)(30 * density)); 
    TableLayout.LayoutParams params = new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    params.bottomMargin = (int)(4 * density); 

    TextView left = new TextView(getApplicationContext()); 
    left.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, 25); 
    TableRow.LayoutParams left_params = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT); 
    left_params.gravity = Gravity.CENTER_VERTICAL; 
    left.setText(left_text); 

    TextView right = new TextView(getApplicationContext()); 
    right.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, 18); 
    right.setGravity(Gravity.CENTER_VERTICAL); 
    TableRow.LayoutParams right_params = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT); 
    right_params.leftMargin = (int)(10 * density); 
    right_params.gravity = Gravity.CENTER_VERTICAL; 
    //right_params.setMargins((int)(10 * density), 0, 0, 0); 
    right_params.weight = 1; 
    right.setText(get_desc("l", left_text)); 

    View line = new View(getApplicationContext()); 
    line.setBackgroundResource(R.drawable.line_on_bottom); 
    TableLayout.LayoutParams line_params = new TableLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, (int)density); 
    line_params.setMargins((int)(20 * density), 0, (int)(20 * density), 0); 

    tr.addView(left, left_params); 
    tr.addView(right, right_params); 
    tl.addView(tr, params); 
    tl.addView(line, line_params); 


} 

XML:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/o_details" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TableLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingLeft="10dip" 
     android:paddingRight="4dip" 
     android:paddingTop="4dip" > 

     <TableRow 
      android:id="@+id/o_row01" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:minHeight="30dp" 
      android:layout_marginBottom="4dip" > 

      <TextView 
       android:id="@+id/o_num01" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical" 
       android:text="@string/_" 
       android:textSize="25dip" 
       /> 
+0

哪裏TextView的位置,在XML和代碼? – zmbq

+0

@zmbq問題更新... – pbm

回答

1

一種簡單的解決方法是如下 - 嘗試使用其已知的ID檢索的TextView(根據上面的XML),無論是在onResume()方法或添加行函數(上面的代碼)並手動將顏色設置爲黑色/灰色。函數setBackgroundColor將有所幫助。

用法 -

mytextview.setBackgroundColor(getResources().getColor(R.color.darkgrey)); 

(如果你定義的資源/ color.xml用十六進制值的顏色 'darkgrey')

+0

我知道我可以改變顏色,但我不認爲這是解決方案。我想知道它爲什麼像我描述的那樣。 – pbm