Bug 1137483 - Center SearchEngineBar when it doesn't fill the screen. r=liuche

This commit is contained in:
Michael Comella 2015-04-21 17:12:43 -07:00
parent b3864c37ec
commit 2b564c05ce
3 changed files with 51 additions and 31 deletions

View File

@ -14,6 +14,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import org.mozilla.gecko.R;
import org.mozilla.gecko.widget.FaviconView;
@ -33,24 +34,12 @@ public class SearchEngineBar extends TwoWayView
private final SearchEngineAdapter adapter;
private OnSearchBarClickListener onSearchBarClickListener;
private final Paint dividerPaint;
public SearchEngineBar(final Context context, final AttributeSet attrs) {
super(context, attrs);
adapter = new SearchEngineAdapter();
setAdapter(adapter);
setOnItemClickListener(this);
dividerPaint = new Paint();
dividerPaint.setColor(getResources().getColor(R.color.divider_light));
}
@Override
public void onDraw(final Canvas canvas) {
super.onDraw(canvas);
canvas.drawLine(0, 0, getWidth(), 0, dividerPaint);
}
@Override
@ -112,4 +101,33 @@ public class SearchEngineBar extends TwoWayView
return view;
}
}
/**
* A Container to surround the SearchEngineBar. This is necessary so we can draw
* a divider across the entire width of the screen, but have the inner list layout
* not take up the full width of the screen so it can be centered within this container
* if there aren't enough items that it needs to scroll.
*
* Note: a better implementation would have this View inflating an inner layout so
* the containing layout doesn't need two "SearchEngineBar" Views but it wasn't
* worth the refactor time.
*/
@SuppressWarnings("unused") // via XML
public static class SearchEngineBarContainer extends FrameLayout {
private final Paint dividerPaint;
public SearchEngineBarContainer(final Context context, final AttributeSet attrs) {
super(context, attrs);
dividerPaint = new Paint();
dividerPaint.setColor(getResources().getColor(R.color.divider_light));
}
@Override
public void onDraw(final Canvas canvas) {
super.onDraw(canvas);
canvas.drawLine(0, 0, getWidth(), 0, dividerPaint);
}
}
}

View File

@ -19,24 +19,26 @@
android:layout_height="0dp"
android:layout_weight="1" />
<!-- The desired layout_height is 48dp. We add paddingTop so we have
space to dynamically draw the divider in onDraw. Preferably, we'd
wrap_content on the inner layout, but TwoWayView ignores wrap_content. :(
Note: the layout_height value is shared with the inner layout
(search_engine_bar_item at the time of this writing).
listSelector is too slow for showing pressed state
so we set the pressed colors on the child. -->
<org.mozilla.gecko.home.SearchEngineBar
android:id="@+id/search_engine_bar"
<view class="org.mozilla.gecko.home.SearchEngineBar$SearchEngineBarContainer"
android:layout_width="match_parent"
android:layout_height="49dp"
android:paddingTop="1dp"
android:orientation="horizontal"
android:background="#fff"
android:choiceMode="singleChoice"
android:listSelector="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"/>
android:layout_height="wrap_content"
android:background="#fff">
<!-- We add a marginTop so the outer container can draw a divider.
listSelector is too slow for showing pressed state
so we set the pressed colors on the child. -->
<org.mozilla.gecko.home.SearchEngineBar
android:id="@+id/search_engine_bar"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_marginTop="1dp"
android:orientation="horizontal"
android:layout_gravity="center_horizontal"
android:choiceMode="singleChoice"
android:listSelector="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"/>
</view>
</LinearLayout>

View File

@ -11,7 +11,7 @@
View (browser_search at the time of this writing). -->
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="48dp"
android:layout_height="match_parent"
android:layout_width="72dp"
android:background="@color/pressed_about_page_header_grey">