请教高手关于horizontal scrollScrollView滚动后焦点获取的问题

请教高手关于HorizontalScrollView滚动后焦点获取的问题_百度知道
请教高手关于HorizontalScrollView滚动后焦点获取的问题
提问者采纳
经过我的实验.getLeft()-100是我想把HorizontalScrollView sv_price滚动到的最终位置.postDelayed((new Runnable() { @Override public void run() { sv_price,5).getLeft()-100.getChildAt(housePriceIndex)): new Handler(),一下代码可以完美解决问题.getChildAt(housePriceIndex))。最后的一个5是延迟的时间。; } }),0).scrollTo(((RadioButton)rg_其中 ((RadioButton)rg_price
来自团队:
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁自定义GridView以解决ScrollView嵌套Android自身GridView出现的疑难问题 -
- ITeye技术网站
博客分类:
Android开发中偶尔会遇到ScrollView嵌套GridView情景,但是谷歌官网是不推荐这种方式的,因为他们都有滚动条,嵌套使用会有冲突,无奈只能另谋他路,自定义个仿GridView的控件
1.定义attrs.xml文件
&declare-styleable name="GridLinearLayout"&
&attr name="verticalSpace" format="dimension"/&
&attr name="horizontalSpace" format="dimension"/&
&attr name="rows" format="integer"/&
&attr name="columns" format="integer"/&
&/declare-styleable&
2.定义GridLinearLayout文件
* 一个没有滚动条的LinearLayout,但是却很像GridView。
* 实际上,就是为了解决当GridView被包含在一个SrcollView中而却拥有两个滚动条相互排斥而做。
public class GridLinearLayout extends LinearLayout{
/**仿GridView单元格适配器*/
private BaseA
/**仿GridView列数*/
private int columns=1;
/**仿GridView行数*/
private int rows=1;
/**仿GridView填充的单元格总数*/
/**仿GridView单元格单击事件*/
private OnCellClickListener onCellClickL
/**布局水平分割线宽度*/
private int horizontalSpace =1;
/**布局垂直分割线宽度*/
private int verticalSpace =1;
* 仿GridView构造方法
* @param context
public GridLinearLayout(Context context) {
super(context);
* 仿GridV构造方法
* @param context
* @param attrs
public GridLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
initAttrs(context, attrs);
* 加载xml文件设置的属性值
* @param context
* @param attrs
private void initAttrs(Context context ,AttributeSet attrs){
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.GridLinearLayout);
columns = typedArray.getInteger(R.styleable.GridLinearLayout_columns, 1);
rows = typedArray.getInteger(R.styleable.GridLinearLayout_rows, 1);
horizontalSpace = typedArray.getDimensionPixelSize(R.styleable.GridLinearLayout_horizontalSpace, 0);
verticalSpace = typedArray.getDimensionPixelSize(R.styleable.GridLinearLayout_verticalSpace, 0);
typedArray.recycle();
* 构造水平显示LinearLayout用于填充cell
private LinearLayout rowLinearLayout(){
LinearLayout itemLinearLayout = new LinearLayout(getContext());
itemLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
itemLinearLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
itemLinearLayout.setGravity(Gravity.LEFT);
return itemLinearL
* 仿GridView将适配器单元格绑定到当前LinearLayout中
public void bindLinearLayout() {
removeAllViews();
rows = getSpecialRows(true);
if(rows==-1){
for(int r=0;r&r++){
LinearLayout itemRow = rowLinearLayout();
for(int c=0;c&c++){
final int index = r*columns+c;
View cellView = adapter.getView(index, null, null);
cellView.setLayoutParams(cellLayoutParams(index));
if(index&count||index==(count-1)){
itemRow.addView(cellView,c);
cellView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(onCellClickListener!=null){
onCellClickListener.onCellClick(index);
if(index==(count-1)){
addView(itemRow, r);
addView(itemRow, r);
* 获取屏幕宽度用于均分一行LinearLayout各个Cell
@SuppressWarnings("deprecation")
private int screenWidth(){
/*Point outSize = new Point();
WindowManager windowManager = (WindowManager) getContext().getSystemService(Service.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
display.getSize(outSize);
return outSize.x;*/
int screenW
WindowManager windowManager = (WindowManager) getContext().getSystemService(Service.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
screenWidth = display.getWidth();
return screenW
* 设置当前单元格边距,
* 每一行第一个左边距为0底边距为horizontalSpace,
* 其他单元格左边距为verticalSpace底边距为horizontalSpace
* @param index 单元格序数
private LayoutParams cellLayoutParams(int index){
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(cellWidth(),LayoutParams.WRAP_CONTENT);
if(index%columns==0){
params.setMargins(0, 0, 0, horizontalSpace);
params.setMargins(verticalSpace, 0, 0, horizontalSpace);
* 计算单元格宽度
private int cellWidth(){
int cellScreenWidth = screenWidth()-(columns-1)*verticalS
return cellScreenWidth/
* 是否按列的倍数返回行数
* @param isSpecial TRUE:返回列的倍数行数,FALSE:有多少行显示多少行
* @return 返回-1时表示列数为0
private int getSpecialRows(boolean isSpecial){
if(isSpecial){
return count/
return (int) Math.ceil((double)count/columns);
} catch (Exception e) {
e.printStackTrace();
return -1;
* 返回该控件的适配器
public BaseAdapter getAdapter() {
* 设置该控件的适配器
* @param adapter 自定义适配器
public void setAdapter(BaseAdapter adapter) {
this.adapter =
this.count = adapter.getCount();
* 返回该控件的列数
public int getColumns() {
* 设置该控件的列数
* @param columns 列数
public void setColumns(int columns) {
this.columns =
* 返回该控件的行数
public int getRows() {
* 设置该控件的行数
* @param rows 行数
public void setRows(int rows) {
this.rows =
* 返回该控件各单元格水平间距
public int getHorizontalSpace() {
return horizontalS
* 设置该控件各单元格水平间距
* @param horizontalSpace 间距
public void setHorizontalSpace(int horizontalSpace) {
this.horizontalSpace = horizontalS
* 返回该控件各单元格垂直间距
public int getVerticalSpace() {
return verticalS
* 设置该控件各单元格垂直间距
* @param verticalSpace 间距
public void setVerticalSpace(int verticalSpace) {
this.verticalSpace = verticalS
public interface OnCellClickListener{
public void onCellClick(int index);
* 监听响应单元格单击事件
* @param onCellClickListener 单元格单击事件接口
public void setOnCellClickListener(OnCellClickListener onCellClickListener){
this.onCellClickListener = onCellClickL
3.可以将此控件嵌套在ScrollView中,然后调用方式如下
//获取控件
glFriendRecommendTask = (GridLinearLayout) view.findViewById(R.id.glFriendRecommendTask);
//设置控件适配器,适配器按正常方式定义即可
glFriendRecommendTask.setAdapter(friendRecommendTaskAdapter);
//如果需要监听适配器中的单击事件可在此处触发
glFriendRecommendTask.setOnCellClickListener(new OnCellClickListener() {
public void onCellClick(int index) {
//设置该控件显示的列数
glFriendRecommendTask.setColumns(3);
//最后调用绑定方法即可
glFriendRecommendTask.bindLinearLayout();
浏览: 7467 次显示问题:
1、设置ScrollView的fillViewPort为true
2、设置ViewPager的layout_height为一个固定高度,比如:100dip
冲突问题:
不过ViewPager显示出来以后,还有另外一个冲突:ViewPager左右不能滑动了!是的,因为这个事件其实已经被外层的ScrollView截获!
重写ScrollView控件!
1、/item/d8fa39c66bfe1b6ce777.html &
2、&(重写ScrollView解决焦点冲突)
备注:如果用到了下拉刷新scrollview就不需要重写组件了
阅读(...) 评论()

我要回帖

更多关于 horizontalscrollview 的文章

 

随机推荐