viewpager的layout_width="wrap_content"无效问题

在viewpager当中直接使用layout_width="wrap_content"是无效的,扩展了一下。解决这个问题。

package com.soulagou.ui;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
/**
 *
 * @author pangxg
 * @title 扩展viewPager
 * @description 和一般的ViewPager一样使用
 */
public class ViewPager extends android.support.v4.view.ViewPager{
    //private static final String tag=ViewPager.class.getSimpleName();
    protected ViewPager viewPager=null;
    protected final int wrap_content=-2;
    protected final int match_parent=-1;
    protected int w  =match_parent;
    protected int h   =match_parent;
    protected int ph =match_parent;
    protected int pw =match_parent;

    public ViewPager(Context context) {
        super(context);
        viewPager=this;
    }
    public ViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        viewPager=this;
    }
    @Override
    protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {
        super.onLayout(arg0, arg1, arg2, arg3, arg4);
         ViewGroup.LayoutParams params =null;
         ph=viewPager.getLayoutParams().height;
         pw=viewPager.getLayoutParams().width; 

         Drawable  bg=  viewPager.getBackground();
         if (bg!=null) {
                int h = bg.getIntrinsicHeight();
                int w= bg.getIntrinsicWidth();
                if (ph==wrap_content) {
                    this.h=h;
                }else if( ph==match_parent) {
                    this.h=ph;
                }

                if (pw==wrap_content) {
                    this.w=w;
                }else if( pw==match_parent) {
                    this.w=pw;
                }
        }
        viewPager.setBackgroundColor(getResources().getColor(android.R.color.transparent));
        ViewParent pv=viewPager.getParent();
        if (pv instanceof LinearLayout) {
            params = new LinearLayout.LayoutParams(this.w, this.h);
        }else if (pv instanceof RelativeLayout) {
            params = new RelativeLayout.LayoutParams(this.w, this.h);
        }else if (pv instanceof FrameLayout) {
            params = new FrameLayout.LayoutParams(this.w, this.h);
        }
        viewPager.setLayoutParams(params);
    }
    @Override
    protected void onMeasure(int arg0, int arg1) {
        super.onMeasure(arg0, arg1);
    }

}

在xml中和原来的viewPager一样使用就可以了。

<FrameLayout android:layout_marginTop="13dp"    android:layout_gravity="center_horizontal"   android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/bord_indexbg">
     <com.soulagou.ui.ViewPager
          android:id="@+id/myindex_guidePager"
          android:layout_gravity="center_horizontal"
          android:layout_marginTop="5dp"
          android:background="@drawable/defa_advpic"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content">
     </com.soulagou.ui.ViewPager>
</FrameLayout>
时间: 2024-10-28 21:31:57

viewpager的layout_width="wrap_content"无效问题的相关文章

【android】解决Viewpager设置高度为wrap_content无效的方法

今天发现设置viewpager高度为wrap_content时并没作用.stackoverflow给出了解决方式,就是自己定义viewpager,重写onMesure()方法: public class WrapContentHeightViewPager extends ViewPager { /** * Constructor * * @param context the context */ public WrapContentHeightViewPager(Context context

Android查缺补漏(View篇)--自定义 View 中 wrap_content 无效的解决方案

自定义 View 中 wrap_content 无效的解决方案 做过自定义 View 的童鞋都会发现,直接继承 View 的自定义控件需要重写 onMeasure() 方法,并设置 wrap_content 时的自身大小,否在在布局文件中对自定义控件在设置大小时,wrap_content 将等同于 match_parent. 其实在 Android 中自带的控件中,也都对 onMeasure() 方法进行了重写,对于 wrap_content 等情况做了特殊处理,在 wrap_content 时

ViewPager不能高度自适应?height=wrap_content 无效解决办法

ViewPager用的很多,主要用啦展示广告条.可是高度却不能自适应内容,总是会占满全屏,即使设置android:height="wrap_content"也是没有用的.. 解决办法其实网上有很多,但是个人感觉不是很好 比如:LinearLayout的时候, 使用weight来自动调整ViewPager的高度. 一般的代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android

RecyclerView android:layout_width="match_parent"无效

使用RecyclerView 时,在xml文件中设置宽度match_parent无效,发现在Adapter中要如下填充view(注释掉的填充方式会导致match_parent无效) /** * 创建新View,被LayoutManager所调用 */ @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // View view = View.inflate(parent.getConte

RelativeLayout设置wrap_content无效

尊重劳动成果,转载请标明出处:http://www.cnblogs.com/tangZH/p/8419053.html 在做项目的过程中,遇到了一个奇怪的现象,我设置RelativeLayout为的宽度为wrap_content,而且RelativeLayout里面的组件也设置了固定大小,可是RelativeLayout宽度大小还是会铺满整个屏幕. 为啥???一脸闷逼 百度之后发现,官方文档有解释: A Layout where the positions of the children can

Android ViewPager使用详解

转载自博客:http://blog.csdn.net/alangdangjia/article/details/9054921/ 这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等.那如何使用它呢,与LisstView类似,我们也需要一个适配器,他就是PagerAdapter.看一下api的图片, ViewPager的功能就是可以使视图滑动,就像Lanu

Android -- 使用ViewPager实现画廊效果

1,今天在微信推送文章看到实现画廊效果,感觉挺不错的,就来写写试试,先来看一下效果图: 上面的效果基本上可以用两个功能点来包含:ViewPager的切换动画.ImageView的倒影的实现 嗯,先来将我们主要的功能来实现,就是我们的ViewPager展示图片 主界面的布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.

Android:简单实现ViewPager+TabHost+TabWidget实现导航栏导航和滑动切换

viewPager是v4包里的一个组件,可以实现滑动显示多个界面. android也为viewPager提供了一个adapter,此adapter最少要重写4个方法: public int getCount() public boolean isViewFromObject(View view, Object o) public void destroyItem(ViewGroup container, int position, Object object)  public Object in

android学习ViewPager的简单使用

使用ViewPager需要引入android.support.v4.View.ViewPager这样的jar包,谷歌公司为解决当前版本碎片化的问题,提供的兼容的包.主要目的就是解决向下兼容问题. 1,加载显示的页卡 将layout布局转换成view对象 (1)LayoutInflater if= getLayoutInflater().from(this); if.inflater(resource,root); (2) View.inflate(context,resource,root);