2013-04-13 2 views
1

я могу изменить фон в LinearLayout с помощью XML, написавИзменение макета-фон по щелчку программно

андроида: фон = «@ вытяжке/обзор»

к моему LinearLayout.

Однако я не могу сделать это программно. Я пробовал:

LinearLayout horizontal_menu = new LinearLayout (this); ... horizontal_menu.setBackgroundResource (getResources(). GetInteger (R.drawable.overview));

, а также, что источником кода:

horizontal_menu.setBackground (. GetResources() getDrawable (R.drawable.overview));

Первая попытка выдает RuntimeException во время выполнения, то вторая линия, кажется, не делать ничего -> никаких ошибок, никаких исключений, не изменяя фон на нажатия ...

-> overview.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_focused="true" android:drawable="@color/half_transparent"/> 
<item android:state_pressed="true" android:drawable="@color/half_transparent" /> 
</selector> 

Я надеюсь, что любой может мне помочь!

Спасибо!

Edit:

LinearLayout content = (LinearLayout)findViewById(R.id.LinearLayout); 
LinearLayout horizontal_menu = new LinearLayout(this); 
horizontal_menu.setOrientation(LinearLayout.HORIZONTAL); 
horizontal_menu.setBackgroundResource(getResources().getInteger(R.drawable.overv‌​iew)); 
content.addView(horizontal_menu); 
+0

У вас есть ansewer в темах: 1. http://stackoverflow.com/questions/4761686/how-to-set-background-color-of-activity-to-white-programmatically 2. Http: //stackoverflow.com/questions/8961071/android-changing-background-color-of-the-activity-main-view?lq=1 Попробуйте эти возможности и проверьте, не работает ли оно для вас. – mmBs

ответ

7

указан идентификатор для макета в макете файла XML:

<LinearLayout android:id="@+id/myLinearLayout" ... 

, а затем в своей деятельности, получить LinearLayout с findViewById(), как показано ниже:

LinearLayout ll = (LinearLayout) findViewById(R.id.myLinearLayout); 

И затем установить фон для ll с помощью setBac kground методы:

ll.setBackground(...) 
ll.setBackgroundDrawable(...) 
ll.setBackgroundResource(...) 
+0

не работает. изменение состояния не запускается. любое исправление? – ralphgabb

0

У меня была такая же проблема и на основе моего поиска нет никакого способа изменить деятельность или основные стили ViewGroup динамически после super.onCreate .so вы должны либо иметь макет XML и установить, что макет перед super.onCreate или вы должны раздуть этот макет так:

root = (LinearLayout)findViewById(R.id.rootView); 
getLayoutInflater().inflate(R.layout.one,root); 

к сведению, что вы должны иметь представление корневой родительскому макет вы раздувать. и когда вы хотите изменить этот макет просто сделать это:

buttonclick{ 
     root.removeAllViewsInLayout(); 
     v = getLayoutInflater().inflate(R.layout.two,root); 
     root.addView(v,0); 
} 

обратите внимание, что вы можете добавить или удалить каждый виджет или вид на viewGroup.addView также, но на мой взгляд Inflater гораздо лучшим выбором.

EDIT:

очень хороший ответ в этой связи см @broot ответ here.

Смежные вопросы