2014-10-19 9 views
12

ActionBar başlığı için TextView rengini kullanması gereken bir kitaplığım var. AppCompat v7 r21'ten önce sadece ViewById öğesini bulabilir ve rengi doğrudan görünümden alabilirim. Ancak, bazı sebeplerden dolayı bu işe yaramıyor. Görünüm her zaman boş. Tüm görünüm hiyerarşisini ayrıştıran ve tüm TextView'lerin kimliklerini, türlerini ve değerlerini yazdıran kod yazdım. Başlık görünümünde çok tuhaf görünen bir kimlik yoktu.Başlarken ActionBar Başlık TextView with AppCompat v7 r21

Fark ettiğim bir şey, ActionBar'ı almaya çalıştığımda, ne döndüğümün bir Araç Çubuğu olduğu (benim app'umda bir Araç Çubuğu kullanmadım bile) olduğunu fark ettim. Bu yüzden, Toolbar'ın çocuk görünümleri üzerinde yineledim ve bir TextView bulunduğunda, aradığım TextView olduğundan emin olmak için text değerini toolbar.getTitle() ile karşılaştırdım. İdeal değil ve tüm durumlar için çalışıp çalışmadığından emin değilim.

En güvenli çözümün ne olabileceğini bilen var mı? Ben başlıklı şey özel yapıyorsam, benim vakalarda Araç Çubuğu kullanılarak Tipik

+0

Bir çözüm buldunuz mu? – Bene

+0

Hayır, ben sadece Toolbar çocukları geçme yoluyla başlık TextView bulmak için benim koduyla sıkışmış. –

+0

Benim maaşıma bir göz atın: http://stackoverflow.com/a/26888120/2742962 – BugsBunnyBR

cevap

18

, sadece o zaman, elle başlık görünümü şişirmek XML onun özelliklerini belirleyecektir. Toolbar noktası Bunun olmasını gibi şeyler önlemek için, bu nedenle Sonra kodunda, böyle bir şey yapacağını Araç çubuğu

<android.support.v7.widget.Toolbar 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/my_awesome_toolbar" 
     android:layout_height="@dimen/standard_vertical_increment" 
     android:layout_width="match_parent" 
     android:minHeight="@dimen/standard_vertical_increment" 
     android:background="@drawable/actionbar_background"> 


     <TextView 
      style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" 
      android:id="@+id/toolbar_title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="@color/Red" /> 

    </android.support.v7.widget.Toolbar> 

neye benzediğini üzerinde daha fazla kontrole sahip olabilir:

Toolbar toolbar = findViewById(R.id.my_awesome_toolbar); 
//Get rid of the title drawn by the toolbar automatically 
toolbar.setTitle(""); 
TextView toolbarTitle = (TextView) toolbar.findViewById(R.id.toolbar_title); 
toolbarTitle.setTextColor(Color.BLUE); 

Bunun daha eski bir yazı olduğunu biliyorum, ancak bu, Toolbar

+1

Ben kaydırma zaman yeni tasarım kütüphanesi kullanarak, hareket yapmak nasıl. Eğer. Bu şekilde, benim uygulamanın herhangi bir yerinde aktivitesinden renk Araç değiştirebilir – danigonlinea

+0

teşekkürler ve CollapsingToolbarLayout? ben başlık ve alt başlık ikisini de kullanmak gerekir, ama ne yazık görünüyor altyazı yeni tasarım kütüphaneye –

19

'daki özel textc renk ve yazı tiplerinin izin vermesi için bulduğum en iyi yol oldu. Kendi TextView'ınızı oluşturmaya gerek yok, yalnızca yerleşik araç çubuğunu oluşturmak için araç çubuğunda dolaşın. başlığında

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 

// loop through all toolbar children right after setting support 
// action bar because the text view has no id assigned 

// also make sure that the activity has some title here 
// because calling setText() with an empty string actually 
// removes the text view from the toolbar 

TextView toolbarTitle = null; 
for (int i = 0; i < toolbar.getChildCount(); ++i) { 
    View child = toolbar.getChildAt(i); 

    // assuming that the title is the first instance of TextView 
    // you can also check if the title string matches 
    if (child instanceof TextView) { 
     toolbarTitle = (TextView)child; 
     break; 
    } 
} 
+0

yaklaşım –

+0

benim için büyük çalıştı çok güzel! sayesinde – gutte

2

Yansımayı kullanarak anladım.

toolbar = (Toolbar) findViewById(R.id.toolbar); 
toolbar.setTitle("Title"); //important step to set it otherwise getting null 
TextView title = null; 
try{ 
     Field f = toolbar.getClass().getDeclaredField("mTitleTextView"); 
     f.setAccessible(true); 
     title = (TextView) f.get(toolbar); 
     title.setText("I have title TextView"); 
} catch(Exception e){ 
     e.printStackTrace(); 
} 

setSupportActionBar(toolbar); // with this set text view behave differently 
           //and text may not be visible... 
1

Bunu lik yapabilirsiniz ... Ben İşlem Çubuğu desteklemeye değil kümesidir araç çubuğu eğer işler olduğunu unutmayınız.

Bu benim için iştir.

+0

kullanırken görünmüyor ve (0)? Örneğin, ben todo ** gibi bir e-posta yüklemek istediğiniz i getChildAt kurarım nasıl @ so.com ** i yapmalıyım nasıl yukarıdaki kodla? – pnet

İlgili konular