设计原理在你的UI布局有限的情况下,放不下太多的控件的时候,可以考虑用这个滑动式菜单。
效果图:
效果1
效果2
HorzScrollWithImageMenu.java
- package grimbo.android.demo.slidingmenu;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.Button;
- import android.widget.ListView;
- import android.widget.TextView;
- public class HorzScrollWithImageMenu extends Activity {
- MyHorizontalScrollView scrollView;
- View menu;
- View app;
- Button btnSlide;
- boolean menuOut = false;
- Handler handler = new Handler();
- int btnWidth;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- LayoutInflater inflater = LayoutInflater.from(this);
- setContentView(inflater.inflate(R.layout.horz_scroll_with_image_menu,
- null));
- scrollView = (MyHorizontalScrollView) findViewById(R.id.myScrollView);
- menu = findViewById(R.id.menu);
- app = inflater.inflate(R.layout.horz_scroll_app, null);
- ViewGroup tabBar = (ViewGroup) app.findViewById(R.id.tabBar);
- ListView listView = (ListView) app.findViewById(R.id.list);
- ViewUtils.initListView(this, listView, "Item ", 30,
- android.R.layout.simple_list_item_1);
- btnSlide = (Button) tabBar.findViewById(R.id.BtnSlide);
- btnSlide.setOnClickListener(new HorzScrollWithListMenu.ClickListenerForScrolling(
- scrollView, menu));
- // Create a transparent view that pushes the other views in the HSV to
- // the right.
- // This transparent view allows the menu to be shown when the HSV is
- // scrolled.
- View transparent = new TextView(this);
- transparent.setBackgroundColor(android.R.color.transparent);
- final View[] children = new View[] { transparent, app };
- // Scroll to app (view[1]) when layout finished.
- int scrollToViewIdx = 1;
- scrollView.initViews(children, scrollToViewIdx,
- new HorzScrollWithListMenu.SizeCallbackForMenu(btnSlide));
- }
- }
package grimbo.android.demo.slidingmenu;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
public class HorzScrollWithImageMenu extends Activity {
MyHorizontalScrollView scrollView;
View menu;
View app;
Button btnSlide;
boolean menuOut = false;
Handler handler = new Handler();
int btnWidth;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = LayoutInflater.from(this);
setContentView(inflater.inflate(R.layout.horz_scroll_with_image_menu,
null));
scrollView = (MyHorizontalScrollView) findViewById(R.id.myScrollView);
menu = findViewById(R.id.menu);
app = inflater.inflate(R.layout.horz_scroll_app, null);
ViewGroup tabBar = (ViewGroup) app.findViewById(R.id.tabBar);
ListView listView = (ListView) app.findViewById(R.id.list);
ViewUtils.initListView(this, listView, "Item ", 30,
android.R.layout.simple_list_item_1);
btnSlide = (Button) tabBar.findViewById(R.id.BtnSlide);
btnSlide.setOnClickListener(new HorzScrollWithListMenu.ClickListenerForScrolling(
scrollView, menu));
// Create a transparent view that pushes the other views in the HSV to
// the right.
// This transparent view allows the menu to be shown when the HSV is
// scrolled.
View transparent = new TextView(this);
transparent.setBackgroundColor(android.R.color.transparent);
final View[] children = new View[] { transparent, app };
// Scroll to app (view[1]) when layout finished.
int scrollToViewIdx = 1;
scrollView.initViews(children, scrollToViewIdx,
new HorzScrollWithListMenu.SizeCallbackForMenu(btnSlide));
}
}
HorzScrollWithListMenu.java
- package grimbo.android.demo.slidingmenu;
- import grimbo.android.demo.slidingmenu.MyHorizontalScrollView.SizeCallback;
- import java.security.Guard;
- import java.util.Date;
- import android.app.Activity;
- import android.content.Context;
- import android.os.Bundle;
- import android.os.Handler;
- import android.view.GestureDetector.OnGestureListener;
- import android.view.LayoutInflater;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.ViewGroup;
- import android.widget.HorizontalScrollView;
- import android.widget.ImageView;
- import android.widget.ListView;
- import android.widget.Toast;
- /**
- * This demo uses a custom HorizontalScrollView that ignores touch events, and therefore does NOT allow manual scrolling.
- *
- * The only scrolling allowed is scrolling in code triggered by the menu button.
- *
- * When the button is pressed, both the menu and the app will scroll. So the menu isn't revealed from beneath the app, it
- * adjoins the app and moves with the app.
- */
- public class HorzScrollWithListMenu extends Activity implements OnGestureListener{
- MyHorizontalScrollView scrollView;
- View menu;
- View app;
- ImageView btnSlide;
- boolean menuOut = false;
- Handler handler = new Handler();
- int btnWidth;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- LayoutInflater inflater = LayoutInflater.from(this);
- scrollView = (MyHorizontalScrollView) inflater.inflate(R.layout.horz_scroll_with_list_menu, null);
- setContentView(scrollView);
- menu = inflater.inflate(R.layout.horz_scroll_menu, null);
- app = inflater.inflate(R.layout.horz_scroll_app, null);
- ViewGroup tabBar = (ViewGroup) app.findViewById(R.id.tabBar);
- ListView listView = (ListView) app.findViewById(R.id.list);
- ViewUtils.initListView(this, listView, "Item ", 30, android.R.layout.simple_list_item_1);
- listView = (ListView) menu.findViewById(R.id.list);
- ViewUtils.initListView(this, listView, "Menu ", 30, android.R.layout.simple_list_item_1);
- btnSlide = (ImageView) tabBar.findViewById(R.id.BtnSlide);
- btnSlide.setOnClickListener(new ClickListenerForScrolling(scrollView, menu));
- final View[] children = new View[] { menu, app };
- // Scroll to app (view[1]) when layout finished.
- int scrollToViewIdx = 1;
- scrollView.initViews(children, scrollToViewIdx, new SizeCallbackForMenu(btnSlide));
- }
- /**
- * Helper for examples with a HSV that should be scrolled by a menu View's width.
- */
- static class ClickListenerForScrolling implements OnClickListener {
- HorizontalScrollView scrollView;
- View menu;
- /**
- * Menu must NOT be out/shown to start with.
- */
- boolean menuOut = false;
- public ClickListenerForScrolling(HorizontalScrollView scrollView, View menu) {
- super();
- this.scrollView = scrollView;
- this.menu = menu;
- }
- @Override
- public void onClick(View v) {
- Context context = menu.getContext();
- int menuWidth = menu.getMeasuredWidth();
- // Ensure menu is visible
- menu.setVisibility(View.VISIBLE);
- if (!menuOut) {
- // Scroll to 0 to reveal menu
- int left = 0;
- scrollView.smoothScrollTo(left, 0);
- } else {
- // Scroll to menuWidth so menu isn't on screen.
- int left = menuWidth;
- scrollView.smoothScrollTo(left, 0);
- }
- menuOut = !menuOut;
- }
- }
- /**
- * Helper that remembers the width of the 'slide' button, so that the 'slide' button remains in view, even when the menu is
- * showing.
- */
- static class SizeCallbackForMenu implements SizeCallback {
- int btnWidth;
- View btnSlide;
- public SizeCallbackForMenu(View btnSlide) {
- super();
- this.btnSlide = btnSlide;
- }
- @Override
- public void onGlobalLayout() {
- btnWidth = btnSlide.getMeasuredWidth();
- System.out.println("btnWidth=" + btnWidth);
- }
- @Override
- public void getViewSize(int idx, int w, int h, int[] dims) {
- dims[0] = w;
- dims[1] = h;
- final int menuIdx = 0;
- if (idx == menuIdx) {
- dims[0] = w - btnWidth;
- }
- }
- }
- @Override
- public boolean onDown(MotionEvent e) {
- // TODO Auto-generated method stub
- return false;
- }
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
- float velocityY) {
- // TODO Auto-generated method stub
- return false;
- }
- @Override
- public void onLongPress(MotionEvent e) {
- // TODO Auto-generated method stub
- }
- @Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
- float distanceY) {
- // TODO Auto-generated method stub
- return false;
- }
- @Override
- public void onShowPress(MotionEvent e) {
- // TODO Auto-generated method stub
- }
- @Override
- public boolean onSingleTapUp(MotionEvent e) {
- // TODO Auto-generated method stub
- return false;
- }
- }
package grimbo.android.demo.slidingmenu;
import grimbo.android.demo.slidingmenu.MyHorizontalScrollView.SizeCallback;
import java.security.Guard;
import java.util.Date;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.view.GestureDetector.OnGestureListener;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
/**
* This demo uses a custom HorizontalScrollView that ignores touch events, and therefore does NOT allow manual scrolling.
*
* The only scrolling allowed is scrolling in code triggered by the menu button.
*
* When the button is pressed, both the menu and the app will scroll. So the menu isn't revealed from beneath the app, it
* adjoins the app and moves with the app.
*/
public class HorzScrollWithListMenu extends Activity implements OnGestureListener{
MyHorizontalScrollView scrollView;
View menu;
View app;
ImageView btnSlide;
boolean menuOut = false;
Handler handler = new Handler();
int btnWidth;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = LayoutInflater.from(this);
scrollView = (MyHorizontalScrollView) inflater.inflate(R.layout.horz_scroll_with_list_menu, null);
setContentView(scrollView);
menu = inflater.inflate(R.layout.horz_scroll_menu, null);
app = inflater.inflate(R.layout.horz_scroll_app, null);
ViewGroup tabBar = (ViewGroup) app.findViewById(R.id.tabBar);
ListView listView = (ListView) app.findViewById(R.id.list);
ViewUtils.initListView(this, listView, "Item ", 30, android.R.layout.simple_list_item_1);
listView = (ListView) menu.findViewById(R.id.list);
ViewUtils.initListView(this, listView, "Menu ", 30, android.R.layout.simple_list_item_1);
btnSlide = (ImageView) tabBar.findViewById(R.id.BtnSlide);
btnSlide.setOnClickListener(new ClickListenerForScrolling(scrollView, menu));
final View[] children = new View[] { menu, app };
// Scroll to app (view[1]) when layout finished.
int scrollToViewIdx = 1;
scrollView.initViews(children, scrollToViewIdx, new SizeCallbackForMenu(btnSlide));
}
/**
* Helper for examples with a HSV that should be scrolled by a menu View's width.
*/
static class ClickListenerForScrolling implements OnClickListener {
HorizontalScrollView scrollView;
View menu;
/**
* Menu must NOT be out/shown to start with.
*/
boolean menuOut = false;
public ClickListenerForScrolling(HorizontalScrollView scrollView, View menu) {
super();
this.scrollView = scrollView;
this.menu = menu;
}
@Override
public void onClick(View v) {
Context context = menu.getContext();
int menuWidth = menu.getMeasuredWidth();
// Ensure menu is visible
menu.setVisibility(View.VISIBLE);
if (!menuOut) {
// Scroll to 0 to reveal menu
int left = 0;
scrollView.smoothScrollTo(left, 0);
} else {
// Scroll to menuWidth so menu isn't on screen.
int left = menuWidth;
scrollView.smoothScrollTo(left, 0);
}
menuOut = !menuOut;
}
}
/**
* Helper that remembers the width of the 'slide' button, so that the 'slide' button remains in view, even when the menu is
* showing.
*/
static class SizeCallbackForMenu implements SizeCallback {
int btnWidth;
View btnSlide;
public SizeCallbackForMenu(View btnSlide) {
super();
this.btnSlide = btnSlide;
}
@Override
public void onGlobalLayout() {
btnWidth = btnSlide.getMeasuredWidth();
System.out.println("btnWidth=" + btnWidth);
}
@Override
public void getViewSize(int idx, int w, int h, int[] dims) {
dims[0] = w;
dims[1] = h;
final int menuIdx = 0;
if (idx == menuIdx) {
dims[0] = w - btnWidth;
}
}
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
}
MyHorizontalScrollView.java
- package grimbo.android.demo.slidingmenu;
- import android.content.Context;
- import android.os.Handler;
- import android.util.AttributeSet;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.ViewTreeObserver.OnGlobalLayoutListener;
- import android.widget.HorizontalScrollView;
- /**
- * A HorizontalScrollView (HSV) implementation that disallows touch events (so
- * no scrolling can be done by the user).
- *
- * This HSV MUST contain a single ViewGroup as its only child, and this
- * ViewGroup will be used to display the children Views passed in to the
- * initViews() method.
- */
- public class MyHorizontalScrollView extends HorizontalScrollView {
- public MyHorizontalScrollView(Context context, AttributeSet attrs,
- int defStyle) {
- super(context, attrs, defStyle);
- init(context);
- }
- public MyHorizontalScrollView(Context context, AttributeSet attrs) {
- super(context, attrs);
- init(context);
- }
- public MyHorizontalScrollView(Context context) {
- super(context);
- init(context);
- }
- void init(Context context) {
- // remove the fading as the HSV looks better without it
- setHorizontalFadingEdgeEnabled(false);
- setVerticalFadingEdgeEnabled(false);
- }
- /**
- * @param children
- * The child Views to add to parent.
- * @param scrollToViewIdx
- * The index of the View to scroll to after initialisation.
- * @param sizeCallback
- * A SizeCallback to interact with the HSV.
- */
- public void initViews(View[] children, int scrollToViewIdx,
- SizeCallback sizeCallback) {
- // A ViewGroup MUST be the only child of the HSV
- ViewGroup parent = (ViewGroup) getChildAt(0);
- // Add all the children, but add them invisible so that the layouts are
- // calculated, but you can't see the Views
- for (int i = 0; i < children.length; i++) {
- children[i].setVisibility(View.INVISIBLE);
- parent.addView(children[i]);
- }
- // Add a layout listener to this HSV
- // This listener is responsible for arranging the child views.
- OnGlobalLayoutListener listener = new MyOnGlobalLayoutListener(parent,
- children, scrollToViewIdx, sizeCallback);
- getViewTreeObserver().addOnGlobalLayoutListener(listener);
- }
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- // Do not allow touch events.
- return false;
- }
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- // Do not allow touch events.
- return false;
- }
- /**
- * An OnGlobalLayoutListener impl that passes on the call to onGlobalLayout
- * to a SizeCallback, before removing all the Views in the HSV and adding
- * them again with calculated widths and heights.
- */
- class MyOnGlobalLayoutListener implements OnGlobalLayoutListener {
- ViewGroup parent;
- View[] children;
- int scrollToViewIdx;
- int scrollToViewPos = 0;
- SizeCallback sizeCallback;
- /**
- * @param parent
- * The parent to which the child Views should be added.
- * @param children
- * The child Views to add to parent.
- * @param scrollToViewIdx
- * The index of the View to scroll to after initialisation.
- * @param sizeCallback
- * A SizeCallback to interact with the HSV.
- */
- public MyOnGlobalLayoutListener(ViewGroup parent, View[] children,
- int scrollToViewIdx, SizeCallback sizeCallback) {
- this.parent = parent;
- this.children = children;
- this.scrollToViewIdx = scrollToViewIdx;
- this.sizeCallback = sizeCallback;
- }
- @Override
- public void onGlobalLayout() {
- // System.out.println("onGlobalLayout");
- final HorizontalScrollView me = MyHorizontalScrollView.this;
- // The listener will remove itself as a layout listener to the HSV
- me.getViewTreeObserver().removeGlobalOnLayoutListener(this);
- // Allow the SizeCallback to 'see' the Views before we remove them
- // and re-add them.
- // This lets the SizeCallback prepare View sizes, ahead of calls to
- // SizeCallback.getViewSize().
- sizeCallback.onGlobalLayout();
- parent.removeViewsInLayout(0, children.length);
- final int w = me.getMeasuredWidth();
- final int h = me.getMeasuredHeight();
- // System.out.println("w=" + w + ", h=" + h);
- // Add each view in turn, and apply the width and height returned by
- // the SizeCallback.
- int[] dims = new int[2];
- scrollToViewPos = 0;
- for (int i = 0; i < children.length; i++) {
- sizeCallback.getViewSize(i, w, h, dims);
- // System.out.println("addView w=" + dims[0] + ", h=" +
- // dims[1]);
- children[i].setVisibility(View.VISIBLE);
- parent.addView(children[i], dims[0], dims[1]);
- if (i < scrollToViewIdx) {
- scrollToViewPos += dims[0];
- }
- }
- // For some reason we need to post this action, rather than call
- // immediately.
- // If we try immediately, it will not scroll.
- new Handler().post(new Runnable() {
- @Override
- public void run() {
- me.scrollBy(scrollToViewPos, 0);
- }
- });
- }
- }
- /**
- * Callback interface to interact with the HSV.
- */
- public interface SizeCallback {
- /**
- * Used to allow clients to measure Views before re-adding them.
- */
- public void onGlobalLayout();
- /**
- * Used by clients to specify the View dimensions.
- *
- * @param idx
- * Index of the View.
- * @param w
- * Width of the parent View.
- * @param h
- * Height of the parent View.
- * @param dims
- * dims[0] should be set to View width. dims[1] should be set
- * to View height.
- */
- public void getViewSize(int idx, int w, int h, int[] dims);
- }
- }
package grimbo.android.demo.slidingmenu;
import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.HorizontalScrollView;
/**
* A HorizontalScrollView (HSV) implementation that disallows touch events (so
* no scrolling can be done by the user).
*
* This HSV MUST contain a single ViewGroup as its only child, and this
* ViewGroup will be used to display the children Views passed in to the
* initViews() method.
*/
public class MyHorizontalScrollView extends HorizontalScrollView {
public MyHorizontalScrollView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
init(context);
}
public MyHorizontalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public MyHorizontalScrollView(Context context) {
super(context);
init(context);
}
void init(Context context) {
// remove the fading as the HSV looks better without it
setHorizontalFadingEdgeEnabled(false);
setVerticalFadingEdgeEnabled(false);
}
/**
* @param children
* The child Views to add to parent.
* @param scrollToViewIdx
* The index of the View to scroll to after initialisation.
* @param sizeCallback
* A SizeCallback to interact with the HSV.
*/
public void initViews(View[] children, int scrollToViewIdx,
SizeCallback sizeCallback) {
// A ViewGroup MUST be the only child of the HSV
ViewGroup parent = (ViewGroup) getChildAt(0);
// Add all the children, but add them invisible so that the layouts are
// calculated, but you can't see the Views
for (int i = 0; i < children.length; i++) {
children[i].setVisibility(View.INVISIBLE);
parent.addView(children[i]);
}
// Add a layout listener to this HSV
// This listener is responsible for arranging the child views.
OnGlobalLayoutListener listener = new MyOnGlobalLayoutListener(parent,
children, scrollToViewIdx, sizeCallback);
getViewTreeObserver().addOnGlobalLayoutListener(listener);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
// Do not allow touch events.
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// Do not allow touch events.
return false;
}
/**
* An OnGlobalLayoutListener impl that passes on the call to onGlobalLayout
* to a SizeCallback, before removing all the Views in the HSV and adding
* them again with calculated widths and heights.
*/
class MyOnGlobalLayoutListener implements OnGlobalLayoutListener {
ViewGroup parent;
View[] children;
int scrollToViewIdx;
int scrollToViewPos = 0;
SizeCallback sizeCallback;
/**
* @param parent
* The parent to which the child Views should be added.
* @param children
* The child Views to add to parent.
* @param scrollToViewIdx
* The index of the View to scroll to after initialisation.
* @param sizeCallback
* A SizeCallback to interact with the HSV.
*/
public MyOnGlobalLayoutListener(ViewGroup parent, View[] children,
int scrollToViewIdx, SizeCallback sizeCallback) {
this.parent = parent;
this.children = children;
this.scrollToViewIdx = scrollToViewIdx;
this.sizeCallback = sizeCallback;
}
@Override
public void onGlobalLayout() {
// System.out.println("onGlobalLayout");
final HorizontalScrollView me = MyHorizontalScrollView.this;
// The listener will remove itself as a layout listener to the HSV
me.getViewTreeObserver().removeGlobalOnLayoutListener(this);
// Allow the SizeCallback to 'see' the Views before we remove them
// and re-add them.
// This lets the SizeCallback prepare View sizes, ahead of calls to
// SizeCallback.getViewSize().
sizeCallback.onGlobalLayout();
parent.removeViewsInLayout(0, children.length);
final int w = me.getMeasuredWidth();
final int h = me.getMeasuredHeight();
// System.out.println("w=" + w + ", h=" + h);
// Add each view in turn, and apply the width and height returned by
// the SizeCallback.
int[] dims = new int[2];
scrollToViewPos = 0;
for (int i = 0; i < children.length; i++) {
sizeCallback.getViewSize(i, w, h, dims);
// System.out.println("addView w=" + dims[0] + ", h=" +
// dims[1]);
children[i].setVisibility(View.VISIBLE);
parent.addView(children[i], dims[0], dims[1]);
if (i < scrollToViewIdx) {
scrollToViewPos += dims[0];
}
}
// For some reason we need to post this action, rather than call
// immediately.
// If we try immediately, it will not scroll.
new Handler().post(new Runnable() {
@Override
public void run() {
me.scrollBy(scrollToViewPos, 0);
}
});
}
}
/**
* Callback interface to interact with the HSV.
*/
public interface SizeCallback {
/**
* Used to allow clients to measure Views before re-adding them.
*/
public void onGlobalLayout();
/**
* Used by clients to specify the View dimensions.
*
* @param idx
* Index of the View.
* @param w
* Width of the parent View.
* @param h
* Height of the parent View.
* @param dims
* dims[0] should be set to View width. dims[1] should be set
* to View height.
*/
public void getViewSize(int idx, int w, int h, int[] dims);
}
}
ViewUtils.java
- package grimbo.android.demo.slidingmenu;
- import android.content.Context;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.ArrayAdapter;
- import android.widget.ListView;
- import android.widget.Toast;
- /**
- * Utility methods for Views.
- */
- public class ViewUtils {
- private ViewUtils() {
- }
- public static void setViewWidths(View view, View[] views) {
- int w = view.getWidth();
- int h = view.getHeight();
- for (int i = 0; i < views.length; i++) {
- View v = views[i];
- v.layout((i + 1) * w, 0, (i + 2) * w, h);
- printView("view[" + i + "]", v);
- }
- }
- public static void printView(String msg, View v) {
- System.out.println(msg + "=" + v);
- if (null == v) {
- return;
- }
- System.out.print("[" + v.getLeft());
- System.out.print(", " + v.getTop());
- System.out.print(", w=" + v.getWidth());
- System.out.println(", h=" + v.getHeight() + "]");
- System.out.println("mw=" + v.getMeasuredWidth() + ", mh="
- + v.getMeasuredHeight());
- System.out.println("scroll [" + v.getScrollX() + "," + v.getScrollY()
- + "]");
- }
- public static void initListView(Context context, ListView listView,
- String prefix, int numItems, int layout) {
- // By using setAdpater method in listview we an add string array in
- // list.
- String[] arr = new String[numItems];
- for (int i = 0; i < arr.length; i++) {
- arr[i] = prefix + (i + 1);
- }
- listView.setAdapter(new ArrayAdapter<String>(context, layout, arr));
- listView.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
- Context context = view.getContext();
- String msg = "item[" + position + "]="
- + parent.getItemAtPosition(position);
- Toast.makeText(context, msg, 1000).show();
- System.out.println(msg);
- }
- });
- }
- }