Setup ActionBars in layoutlib the same way the platform does it. do not merge.

Instead of using a simple ImageView for the icon, this uses the platform
layout/action_bar_home which uses a custom class to position and resize
the icon (and also supports the Up icon that we don't yet support).

This ensures that the icon is properly positionned and sized like
on devices.

(cherry picked from commit 7396348dfc)

Change-Id: Ifd3bc318089b70ba843519523e366e59d434e919
This commit is contained in:
Xavier Ducrohet
2012-02-06 14:57:22 -08:00
parent a9d9fa723a
commit 331bb0c393
4 changed files with 58 additions and 22 deletions

View File

@@ -1,8 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"> <merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView <include layout="@android:layout/action_bar_home" />
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>

View File

@@ -474,7 +474,7 @@ public final class Matrix_Delegate {
} }
Matrix_Delegate other = sManager.getDelegate(other_matrix); Matrix_Delegate other = sManager.getDelegate(other_matrix);
if (d == null) { if (other == null) {
return false; return false;
} }
@@ -570,7 +570,7 @@ public final class Matrix_Delegate {
} }
Matrix_Delegate other = sManager.getDelegate(other_matrix); Matrix_Delegate other = sManager.getDelegate(other_matrix);
if (d == null) { if (other == null) {
return false; return false;
} }

View File

@@ -145,6 +145,14 @@ abstract class CustomBar extends LinearLayout {
} }
} }
protected void loadIconById(int id, String iconReference) {
ResourceValue value = getResourceValue(iconReference);
if (value != null) {
loadIconById(id, value);
}
}
protected Drawable loadIcon(int index, ResourceType type, String name) { protected Drawable loadIcon(int index, ResourceType type, String name) {
BridgeContext bridgeContext = (BridgeContext) mContext; BridgeContext bridgeContext = (BridgeContext) mContext;
RenderResources res = bridgeContext.getRenderResources(); RenderResources res = bridgeContext.getRenderResources();
@@ -162,32 +170,62 @@ abstract class CustomBar extends LinearLayout {
if (child instanceof ImageView) { if (child instanceof ImageView) {
ImageView imageView = (ImageView) child; ImageView imageView = (ImageView) child;
Drawable drawable = ResourceHelper.getDrawable( return loadIcon(imageView, value);
value, (BridgeContext) mContext);
if (drawable != null) {
imageView.setBackgroundDrawable(drawable);
}
return drawable;
} }
return null; return null;
} }
private Drawable loadIconById(int id, ResourceValue value) {
View child = findViewById(id);
if (child instanceof ImageView) {
ImageView imageView = (ImageView) child;
return loadIcon(imageView, value);
}
return null;
}
private Drawable loadIcon(ImageView imageView, ResourceValue value) {
Drawable drawable = ResourceHelper.getDrawable(value, (BridgeContext) mContext);
if (drawable != null) {
imageView.setImageDrawable(drawable);
}
return drawable;
}
protected TextView setText(int index, String stringReference) { protected TextView setText(int index, String stringReference) {
View child = getChildAt(index); View child = getChildAt(index);
if (child instanceof TextView) { if (child instanceof TextView) {
TextView textView = (TextView) child; TextView textView = (TextView) child;
setText(textView, stringReference);
return textView;
}
return null;
}
protected TextView setTextById(int id, String stringReference) {
View child = findViewById(id);
if (child instanceof TextView) {
TextView textView = (TextView) child;
setText(textView, stringReference);
return textView;
}
return null;
}
private void setText(TextView textView, String stringReference) {
ResourceValue value = getResourceValue(stringReference); ResourceValue value = getResourceValue(stringReference);
if (value != null) { if (value != null) {
textView.setText(value.getValue()); textView.setText(value.getValue());
} else { } else {
textView.setText(stringReference); textView.setText(stringReference);
} }
return textView;
}
return null;
} }
protected void setStyle(String themeEntryName) { protected void setStyle(String themeEntryName) {

View File

@@ -34,7 +34,7 @@ public class FakeActionBar extends CustomBar {
// Cannot access the inside items through id because no R.id values have been // Cannot access the inside items through id because no R.id values have been
// created for them. // created for them.
// We do know the order though. // We do know the order though.
loadIcon(0, icon); loadIconById(android.R.id.home, icon);
mTextView = setText(1, label); mTextView = setText(1, label);
setStyle("actionBarStyle"); setStyle("actionBarStyle");