PDA

Ver la Versión Completa : problema toolbar


rafaxplayer
23/07/15, 19:13:04
hola compañeros estoy en un problema que no le encuentro salida mis actividades usan un toolbar con varias view en su interior que es este:


<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:popupTheme="@style/PopupMenu"
android:theme="@style/toolbarStyle">

<LinearLayout
android:id="@+id/toolbarcontent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<ImageView
android:id="@+id/logo"
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/ic_toolbar_normal" />

<TextView
android:id="@+id/texttitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginRight="15dp"
android:layout_marginTop="-10dp"
android:ellipsize="end"
android:singleLine="true"
android:text="@string/app_name"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="20dp" />
</LinearLayout>
</android.support.v7.widget.Toolbar>


Bien la activada base que uso para las demas seria asi:


public abstract class BaseActivity extends AppCompatActivity {
protected abstract int getLayoutResourceId();

protected abstract String getCustomTitle();

Toolbar toolbar;
TextView txttitle;
ImageView logo;
LinearLayout toolbarContent;
private static String TAG = BaseActivity.class.getSimpleName();

override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResourceId());
toolbar = (Toolbar) findViewById(R.id.toolbar);
txttitle = (TextView) findViewById(R.id.texttitle);
toolbarContent = (LinearLayout) findViewById(R.id.toolbarcontent);
logo = (ImageView) findViewById(R.id.logo);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(null);

if (getCustomTitle() != null) {
txttitle.setText(getCustomTitle());
}


}


}

Dentro del tolbar hay dos views un texview y un image view , mi duda que me tiene desconcertado es como que la referencia a textview (textittle) funciona correctamente y puedo usar su metodologia sin problemas y sin embrago el ImageView (logo) me da null siempre, cuando los dos view están en el dentro del mismo contenedor?

Mi idea es ocultar o mostrar los dos desde un método publico en BaseActivity pero con el textview puedo y con el imageview no por lo que comentaba.

Alguna sugerencia?

Dexafree
24/07/15, 00:50:36
2 cosas

1. Si lo que quieres es ponerle un icono a la Toolbar, no estoy seguro de si con lo siguiente te cargas la posibilidad de poner el up_indicator o el hamburger, pero puedes probar (para ahorrarte tener que meter un LinearLayout dentro)


app:navigationIcon="@drawable/ic_action_bar"

(tambien se puede hacer por codigo)


2. Si no recuerdo mal, Toolbar ofrece el getCustomView(), prueba a hacer el findViewById sobre la View que devuelve (por probar) :pensando:

De todos modos, creo recordar que Google desaconseja el mostrar un icono personalizado (como se hacia en Holo) en la Toolbar

rafaxplayer
24/07/15, 09:10:43
Bueno el tema del icono es que queria que fuera personalizado y sobresaliera de la toolbar como muestra la imagen , por eso o use set logo ya que este la ajusta a la barra.
http://puu.sh/jaRhG/388865f4bb.jpg

he provado a acceder a los elementos con lo que decias:

toolbarContent = (LinearLayout)getSupportActionBar().getCustomView( ).findViewById(R.id.toolbarcontent);

y también da nulo , pero es porque creo que antes hay que hacer un setCustomView a lo mejor.
No se que mas provar , se suponia que toolbar era como una view normal y se podia personalizar , pero al pasarle setSupportActionBar la cosa se complica , no se.. que se os ocurre mas para solucinar esto?

Dexafree
24/07/15, 09:44:45
A las malas siempre puedes usar un FrameLayout y posicionarlo encima.

O un RelativeLayout y el icono a piñón, también.

Nunca he tenido que modificar la Toolbar hasta ese nivel, la verdad

EDIT: En este enlace de stack (que seguro que habrás mirado) comentan una forma, pero un comentario dice que no le funciona...
http://stackoverflow.com/a/27859966