2015-11-19 1 views
0

Я искал его повсюду в StackOverflow и, похоже, не нашел ответа на мой вопрос. Я запускаю устройство API v.16, и ниже приводится способ обновления фона для TextView, который использует Drawable в качестве фона. Все остальное работает - TextViews с успехом меняют свой формат textSize и высоту/ширину, в неотъемлемой части общего кода. Любые идеи о том, что может быть проблемой? Приложение не останавливается, просто нет изменений в толщине штриха. Фактически, TextView полностью утрачивает свой фон в изменении. Исходный фон - это угловой сглаженный прямоугольник с определенной шириной хода, который должен быть вдвое меньшим по размеру, а также шириной его хода. После изменения фон в TextView вообще не отображается.Настройка фонового рисунка на TextView не работает

if (textViewsArrayList.size() != 0) textViews.get(textViewsArrayList.size() - 1).post(new Runnable() { 

     @Override 
     public void run() { 

      for (counter = 0; counter < textViewsArrayList.size(); counter++) { 

       textViewsArrayList.get(counter).getLayoutParams().height = (int)    
       (textViewsArrayList.get(counter).getLayoutParams().height/2); 

       textViewsArrayList.get(counter).getLayoutParams().width = (int) (textViewsArrayList.get(counter).getLayoutParams().width/2); 
       ((TextView) textViewsArrayList.get(counter)).setTextSize(TypedValue.COMPLEX_UNIT_PX, (int) (((TextView) textViewsArrayList.get(counter)).getTextSize()/2)); 

       GradientDrawable background = (GradientDrawable) textViewsArrayList.get(counter).getBackground(); 

       background.setStroke((int) (4/displayMetrics.density/2), (int) Color.parseColor("#FFA500"));; 

       if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 

        ((TextView) textViewsArrayList.get(counter)).setBackground((Drawable) background); 

       } else { 

        ((TextView) textViewsArrayList.get(counter)).setBackgroundDrawable((Drawable) background); 

       } 

      } 

     } 

}); 

В то время как XML для TextView в вопросе:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layout" 
    android:layout_width="320dp" 
    android:layout_height="90dp" 
    android:tag="layout"> 
    <TextView 
     android:id="@+id/textview" 
     android:layout_height="68dp" 
     android:layout_width="match_parent" 
     android:background="@drawable/drawable_xml" 
     android:layout_marginLeft="6dp" 
     android:layout_marginRight="6dp" 
     android:layout_marginTop="7dp" 
     android:tag="textview_in question"/> 

etc. 

Что касается вытяжки XML:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 

    <stroke 
     android:width="4dp" 
     android:color="#FF6600" /> 

    <corners 
     android:bottomRightRadius="10dp" 
     android:bottomLeftRadius="10dp" 
     android:topLeftRadius="10dp" 
     android:topRightRadius="10dp"/> 

    <solid android:color="#FFFFFF" /> 

</shape> 
+0

удалить андроид: background = "@ drawable/drawable_xml" из вашего xml. Только установите фон из java-кода – Anjali

+0

эй, ваш код идеально подходит, когда я проверил ваш код, и я также ответил на ваш вопрос. –

+0

@ Anjali: попробовал, но это не сработало. Спасибо, в любом случае. – Dmitri

ответ

1

Try это,

Настройка фон вытяжки для TextView динамически:

TextView txtHello = new TextView(MainActivity.this); 
txtHello.setLayoutParams(lparams); 
txtHello.setText("Hello World"); 
txtHello.setTextSize(14); 
txtHello.setTextColor(Color.parseColor("#9C9C9C")); 
txtHello.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_launcher, null, null, null); 

Установка фона рисуем в TextView с помощью XML:

<TextView 
    android:id="@+id/textview" 
    android:layout_width="match_parent" 
    android:layout_height="68dp" 
    android:layout_marginLeft="6dp" 
    android:layout_marginRight="6dp" 
    android:layout_marginTop="7dp" 
    android:background="@drawable/rounded_corner" 
    android:textColor="@android:color/black" 
    android:textColorHint="@android:color/black" 
    android:textSize="16sp" /> 

положить файл ниже XML в вашей вытяжке папку:

rounded_corner.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke 
     android:width="4dp" 
     android:color="#FF6600" /> 
    <corners 
     android:bottomLeftRadius="10dp" 
     android:bottomRightRadius="10dp" 
     android:topLeftRadius="10dp" 
     android:topRightRadius="10dp" /> 
    <solid android:color="#FFFFFF" /> 
</shape> 
+0

Спасибо, но я хочу установить его динамически, потому что он предназначен для настройки макета для разных устройств, и я просто не вижу, как это происходит, что я могу ввести значение для каждой вещи в приложении, это было бы катастрофой. – Dmitri

+0

Эй, я обновил код, пожалуйста, изучите его, я сделал это в своем проекте, и он работает нормально, поэтому, пожалуйста, проверьте его. –

+1

@ Parth: Спасибо, ваш ответ помог мне решить проблему. Он намекнул мне, что может быть проблема с моими взглядами. Действительно, в моем текстовом представлении вместо match_parent вместо фиксированного значения для layout_width. Я предполагаю, что это как-то вызвало проблему, возможно, связано с тем, что система запрашивает размер родительского элемента списка (match_parent) для обработки изменения фонового рисунка. Возможно, проблема в том, что я изменяю размер родителя (размер элемента списка), потому что это могло произойти до того, как система сможет завершить новое значение. – Dmitri