Credo Simas's answer è il migliore, ma qui è una versione hacky nel caso in cui si preferisce che.
ViewTools.findActionBarTitle(getWindow().getDecorView()).setOnClickListener(...);
Questo uno dovrebbe essere universale in quanto funziona con:
- magazzino Android
ActionBar
Theme.AppCompat
supporto ActionBar
- V21 in stile
setActionBar
uso <Toolbar android:id="@+id/action_bar"
o passare nel gonfiata Toolbar
come root
- V21 in stile
setSupportActionBar
uso <android.support.v7.widget.Toolbar android:id="@id/action_bar"
o passare nelle gonfiati Toolbar
come root
- personalizzato
Toolbar
implementazioni potrebbe essere necessario un piccolo aggiustamento,
ma allora si potrebbe incapsulare questo in quella classe personalizzata.
Anche se ho provato solo con supporto: v22.
/** @param root usually Activity.getWindow().getDecorView() or your custom Toolbar */
public static @Nullable View findActionBarTitle(@NonNull View root) {
return findActionBarItem(root, "action_bar_title", "mTitleTextView");
}
/** @param root usually Activity.getWindow().getDecorView() or your custom Toolbar */
public static @Nullable View findActionBarSubTitle(@NonNull View root) {
return findActionBarItem(root, "action_bar_subtitle", "mSubtitleTextView");
}
private static @Nullable View findActionBarItem(@NonNull View root,
@NonNull String resourceName, @NonNull String toolbarFieldName) {
View result = findViewSupportOrAndroid(root, resourceName);
if (result == null) {
View actionBar = findViewSupportOrAndroid(root, "action_bar");
if (actionBar != null) {
result = reflectiveRead(actionBar, toolbarFieldName);
}
}
if (result == null && root.getClass().getName().endsWith("widget.Toolbar")) {
result = reflectiveRead(root, toolbarFieldName);
}
return result;
}
@SuppressWarnings("ConstantConditions")
private static @Nullable View findViewSupportOrAndroid(@NonNull View root, @NonNull String resourceName) {
Context context = root.getContext();
View result = null;
if (result == null) {
int supportID = context.getResources().getIdentifier(resourceName, "id", context.getPackageName());
result = root.findViewById(supportID);
}
if (result == null) {
int androidID = context.getResources().getIdentifier(resourceName, "id", "android");
result = root.findViewById(androidID);
}
return result;
}
@SuppressWarnings("unchecked")
public static <T> @Nullable T reflectiveRead(@NonNull Object object, @NonNull String fieldName) {
try {
Field field = object.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
return (T)field.get(object);
} catch (Exception ex) {
Log.w("HACK", "Cannot read " + fieldName + " in " + object, ex);
}
return null;
}
È lo stesso che stai cercando? [Come posso rilevare un clic sul titolo ActionBar?] (Http://stackoverflow.com/questions/7981394/how-can-i-detect-a-click-on-the-actionbar-title) –
@PareshMayani così non è possibile ? –