2014-09-19 3 views
0

У меня есть типичный сценарий - операция master (ListFragment), которая активирует детальную активность при щелчке элемента. Все работает нормально.Почему применение темы к действию вызывает следующий сбой?

Теперь я хотел сделать весь текст в подробном представлении (красном/зеленом) на основе программного условия. Я понимаю, что способ сделать это с темой

Таким образом, в значениях-V14 (мой Samsung Примечание 1 Устройство работает под управлением Android 4.1), styles.xml

<style name="ExpensesStyle" parent="@android:style/TextAppearance.Medium"> 
     <item name="android:textColor">@color/expense_background</item> 
    </style> 

colors.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <color name="credit_background">#6DA000</color> 
    <color name="expense_background">#D30A0A</color> 
</resources> 

AndroidManifest.xml

<activity 
     android:name="com.app.transactions.TransactionActivity" 
     android:label="@string/app_name" 
     android:theme="@style/ExpensesStyle"> 
    </activity> 

андроид: атрибут тема вызывает следующий гр сыпь. Применение стиля к отдельному представлению (EditText) работает правильно.

W/ResourceType(30089): Too many attribute references, stopped at: 0x01010099 
W/ResourceType(30089): Too many attribute references, stopped at: 0x0101009a 
W/ResourceType(30089): Too many attribute references, stopped at: 0x0101009b 
E/com.app.TranAct(30089): Error in creation Tran Detail Activity 
E/com.app.TranAct(30089): android.view.InflateException: Binary XML file line #30: Error inflating class <unknown> 
E/com.app.TranAct(30089): at android.view.LayoutInflater.createView(LayoutInflater.java:619) 
E/com.app.TranAct(30089): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:693) 
E/com.app.TranAct(30089): at android.view.LayoutInflater.rInflate(LayoutInflater.java:752) 
E/com.app.TranAct(30089): at android.view.LayoutInflater.rInflate(LayoutInflater.java:760) 
E/com.app.TranAct(30089): at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
E/com.app.TranAct(30089): at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
E/com.app.TranAct(30089): at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
E/com.app.TranAct(30089): at com.android.internal.policy.impl.PhoneWindow.generateLayout(PhoneWindow.java:3163) 
E/com.app.TranAct(30089): at com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:3223) 
E/com.app.TranAct(30089): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:312) 
E/com.app.TranAct(30089): at android.app.Activity.setContentView(Activity.java:1924) 
E/com.app.TranAct(30089): at com.app.transactions.TransactionActivity.onCreate(TransactionActivity.java:30) 

Activity.onCreate

@Override 
    protected void onCreate(Bundle instanceState) { 
     try { 
      super.onCreate(instanceState); 
      setContentView(R.layout.activity_simple); 

      Intent intent = getIntent(); 
      long transId = intent.getLongExtra(EXTRA_TRAN_ID, 0); 
      boolean isExpense = intent.getBooleanExtra(EXTRA_TRAN_IS_EXPENSE, true); 

      if(instanceState != null) 
       return; 

      Fragment frag = TransactionDetailFragment.newInstance(isExpense ? new ExpenseFragment(): new CreditFragment(), 
                   transId, this); 
      getSupportFragmentManager().beginTransaction() 
             .add(R.id.simple_fragment_container, frag) 
             .commit(); 
     } catch (Exception e) { 
      Log.e(TAG, "Error in creation Tran Detail Activity", e); 
     } 

    } 

layout.activity_simple простой framelayout с заполнителем для фрагмента.

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

Линия 30 макета фрагмента содержит

<TextView 
    style="?android:listSeparatorTextViewStyle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/label_category" /> 
+0

Можете ли вы выслать код активности? – crazyPixel

+0

Возможно, макет, который вы используете в своей деятельности? – Blackbelt

+0

@crazyPixel какой-либо конкретный метод? – Gishu

ответ

2

style="?android:listSeparatorTextViewStyle" не определен в parent="@android:style/TextAppearance.Medium"

все параметры, которые рассматривают использование должны быть определены либо в вашем стиле или в родительском стиле.

редактировать:

ответить на ваш реальный вопрос (как сделать эти работы стиля), здесь идет какое-то направление:

создать редактирования текста стиль:

<style name="MyApp_EditText_style" parent="android:Widget.EditText"> 

// those below are all the items you CAN change, 
// but you should only change those that you really need. 

     <item name="android:focusable">___value___</item> 
     <item name="android:focusableInTouchMode">___value___</item> 
     <item name="android:clickable">___value___</item> 
     <item name="android:background">___value___</item> 
     <item name="android:textAppearance">___value___</item> 
     <item name="android:textColor">___value___</item> 
     <item name="android:gravity">___value___</item> 
</style> 

затем ваш стиль Actictivity или Application добавьте текст редактирования

<style name="MyApp.Theme" parent="@android:style/Theme.Holo"> 
    <item name="android:editTextStyle">@style/MyApp_EditText_style</item> 
</style> 

Обратите внимание, что стиль действия или приложения parent ДОЛЖЕН быть одним из основных Android theme, таких как HOLO, HOLO.LIGHT, Theme.Light или потомок одного из них.

+0

http://developer.android.com/guide/topics/ui/themes.html примеры :(Что я хочу сделать, так это сделать весь редактируемый текст в действии отображается красным шрифтом. Что мне нужно переопределить в стиле? Я вижу, что мои метки получают красный шрифт (если я удаляю стиль listSeparator .., который я хочу) + мои элементы управления редактирования все еще в черном по умолчанию. Мне нужно обратное – Gishu

+0

, пожалуйста, проверьте мои изменения. – Budius

+0

Решил это по-другому. Но спасибо, что нашли время, чтобы вывести меня из-за аварии :) – Gishu

0

Как только Будиус взломал корпус, вот как я смог достичь своей цели.

SeeAlso

Шаг1:

значения \ styles.xml Существует уже стиль называется AppBaseTheme определен и еще один, полученный из него называется AppBase. Я нахожу, что AppBaseTheme происходит из разных тем для Android (проверьте аналогичный файл в значениях-v11 или values-v14). Поскольку у меня нет какой-либо конкретной версии, я создаю пару стилей, полученных из AppBase.

<style name="ExpensesStyle" parent="AppTheme"> 
     <item name="android:textColorSecondary">@color/expense_caption_color</item> 
    </style> 

я нашел после того, как некоторые обстреливая через платформу themes.xml + экспериментирует: textColorPrimary => применяется для редактирования элементов управления. textColorSecondary => применяется к ярлыкам. Так переопределите элементы, определенные в существующей теме. Я решил сделать подписи/ярлыки меняться здесь - выглядит лучше.

Шаг2: В деятельности :: OnCreate, вызовите setTheme(R.style.ExpensesStyle) перед тем setContentView()

Если вы не хотите, программное управление, вы можете заявить об этом в AndroidManifest.xml, как показано в этом вопросе.

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