I'm trying to use a 9-patch drawable as the background of a LinearLayout.
when i add views to the layout in the xml, I see the background just fine in Eclipse graphical layout, but when I launch the app, the background is invisible.
here's the layout code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/arrow_up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/quickaction_arrow_up" />
<ImageView
android:id="@+id/arrow_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:src="@drawable/quickaction_arrow_left" />
<LinearLayout
android:id="@+id/tracks"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/arrow_up"
android:layout_toRightOf="@id/arrow_left"
android:layout_centerVertical="true"
android:padding="5dp"
android:background="@drawable/action_popup"
android:orientation="vertical" >
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<include layout="@layout/action_item" android:id="@+id/item1"/>
<include layout="@layout/action_item" android:id="@+id/item2"/>
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/arrow_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/tracks"
android:src="@drawable/quickaction_arrow_right" />
<ImageView
android:id="@+id/arrow_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tracks"
android:src="@drawable/quickaction_arrow_down" />
</RelativeLayout>
and here the code for action_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="65dp"
android:layout_height="100dp"
android:gravity="center"
android:clickable="true"
android:padding="5dp"
android:background="@drawable/quickaction_slider_btn">
<ImageView
android:id="@+id/iv_icon"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:scaleType="fitXY"
android:layout_weight="4"/>
<TextView
android:id="@+id/tv_title"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:gravity="center"
android:ellipsize="end"
android:textSize="12sp"
android:textColor="#666"/>
</LinearLayout>
Edit:
code snippet where I adding to the layout:
protected void createActionList() {
WindowManager windowManager = (WindowManager)
m_context.getSystemService(Context.WINDOW_SERVICE);
final int screenWidth = windowManager.getDefaultDisplay().getWidth();
final int numItems = mActionItemList.size();
View view;
LinearLayout parent = null;
boolean needNewRow = true;
for( int i = 0; i < numItems; i++ ) {
if( i % m_numOfColumns == 0 && m_numOfColumns > 0 ) {
needNewRow = true;
}
if( needNewRow ) {
parent = new LinearLayout( m_context );
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT );
parent.setOrientation(LinearLayout.HORIZONTAL);
params.weight = 1;
parent.setLayoutParams( params );
mTrack.addView( parent);
}
view = mAdapter.getView( i, null, parent );
parent.addView(view);
parent.measure( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT );
int padding = mTrack.getPaddingLeft() + mTrack.getPaddingRight();
int parentWidth = parent.getMeasuredWidth() + padding;
int childWidth = parentWidth / parent.getChildCount();
needNewRow = false;
if( parentWidth + childWidth > screenWidth ) {
m_numOfColumns = -1;
needNewRow = true;
}
}
}
and code of the mAdapter.getView
:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ActionItem action = (ActionItem)getItem(position);
String title = action.getTitle();
Drawable icon = action.getIcon();
View container = (View) inflater.inflate(R.layout.action_item, parent, false);
ImageView img = (ImageView) container.findViewById(R.id.iv_icon);
TextView text = (TextView) container.findViewById(R.id.tv_title);
if (icon != null) {
img.setImageDrawable(icon);
} else {
img.setVisibility(View.GONE);
}
if (title != null) {
text.setText(title);
} else {
text.setVisibility(View.GONE);
}
final int pos = mChildPos++;
final int actionId = action.getActionId();
container.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mItemClickListener != null) {
mItemClickListener.onItemClick(MyQuickAction.this, pos, actionId);
}
if (!getActionItem(pos).isSticky()) {
mDidAction = true;
//workaround for transparent background bug
//thx to Roman Wozniak <[email protected]>
v.post(new Runnable() {
@Override
public void run() {
dismiss();
}
});
}
}
});
container.setFocusable(true);
container.setClickable(true);
return container;
}
here's the layout background 9-patch drawable:
Change the background from 9-patch to some extra color. And run it through code and without it. Is this new background visible? For my first version is that your 9-patch is probably under the list.