布局Android的不同宽度的ViewPager [英] Android different widths of layouts in ViewPager

查看:384
本文介绍了布局Android的不同宽度的ViewPager的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要创建使用水平查看传呼机一些滚动视图。左视图必须有完整的屏幕宽度,而右侧只有四分之一的宽度(它会像海豚浏览器垂直面板)。这是可能做到这一点?我改变了 Android的:在合适的布局layout_width ,但没有奏效。

我的code:

 公共类TestActivity扩展FragmentActivity {

@覆盖
公共无效的onCreate(最终捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main_view);

    MyPagerAdapter适配器=新MyPagerAdapter();
    ViewPager寻呼机=(ViewPager)findViewById(R.id.panelPager);
    pager.setAdapter(适配器);
    pager.setCurrentItem(0);
    }
 }
 

main_view.xml

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:方向=垂直>

< android.support.v4.view.ViewPager
    机器人:ID =@ + ID / panelPager
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent/>
< / LinearLayout中>
 

MyPagerAdapter.java

 公共类MyPagerAdapter扩展PagerAdapter {

@覆盖
公众诠释getCount将(){
    返回2;
}

@覆盖
公共对象instantiateItem(最终查看集合,最终诠释位置){

    LayoutInflater充气=
            (LayoutInflater)collection.getContext()getSystemService(Context.LAYOUT_INFLATER_SERVICE)。

    INT渣油= 0;
    开关(位置){
    情况下0:
        渣油= R.layout.left;
        打破;
    情况1:
        渣油= R.layout.right;
        打破;
    }

    查看查看= inflater.inflate(渣油,NULL);
    ((ViewPager)集合).addView(查看,0);

    返回查看;
}

@覆盖
公共无效destroyItem(最终查看为arg0,最终诠释ARG1,最终目标ARG2){
    ((ViewPager)为arg0).removeView((查看)ARG2);

}

@覆盖
公共布尔isViewFromObject(最终查看arg0中,最终目标ARG1){
    返回将arg0 ==((查看)ARG1);

}
 

left.xml

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:layout_width =match_parent
机器人:layout_height =match_parent
机器人:方向=垂直>

<的TextView
    机器人:ID =@ + ID / textView1
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:文本=左/>

< / LinearLayout中>
 

right.xml

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:layout_width =50dp
机器人:layout_height =match_parent
机器人:方向=垂直
机器人:背景=@色/ light_blue>


<的TextView
    机器人:ID =@ + ID / textView2
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =WRAP_CONTENT
    机器人:文本=RIGHT/>

< / LinearLayout中>
 

解决方案

检查墨菲的回答对<一href="http://stackoverflow.com/questions/10569208/swipe-half-page-in-a-viewpager-from-compatibility-pack/10575613#10575613">this问题。你需要重写PagerAdapter的 getPageWidth()的方法对你PagerAdapter类,像这样的例子:

  @覆盖
公众持股量getPageWidth(INT页){
    如果(页== 0){
        显示显示= getWindowManager()getDefaultDisplay()。
        点大小=新的点();
        display.getSize(大小);
        返程(浮点)LEFT_FRAGMENT_PIXEL_WIDTH / size.x;
    }
    其他
        返回super.getPageWidth(页);
}
 

I want to create some scroll view using Horizontal View Pager. Left view must has full screen width, but right only a quarter of width (it will be a vertical panel like in Dolphin browser). It's possible to do that? I changed android:layout_width in right layout, but it didn't work.

My code:

 public class TestActivity extends FragmentActivity {

@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_view);

    MyPagerAdapter adapter = new MyPagerAdapter();
    ViewPager pager = (ViewPager) findViewById(R.id.panelPager);
    pager.setAdapter(adapter);
    pager.setCurrentItem(0);
    }
 } 

main_view.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<android.support.v4.view.ViewPager
    android:id="@+id/panelPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</LinearLayout>

MyPagerAdapter.java

public class MyPagerAdapter extends PagerAdapter {

@Override
public int getCount() {
    return 2;
}

@Override
public Object instantiateItem(final View collection, final int position) {

    LayoutInflater inflater =
            (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    int resId = 0;
    switch (position) {
    case 0:
        resId = R.layout.left;
        break;
    case 1:
        resId = R.layout.right;
        break;
    }

    View view = inflater.inflate(resId, null);
    ((ViewPager) collection).addView(view, 0);

    return view;
}

@Override
public void destroyItem(final View arg0, final int arg1, final Object arg2) {
    ((ViewPager) arg0).removeView((View) arg2);

}

@Override
public boolean isViewFromObject(final View arg0, final Object arg1) {
    return arg0 == ((View) arg1);

}

left.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="LEFT" />

</LinearLayout>

right.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="50dp"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/light_blue" >


<TextView
    android:id="@+id/textView2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="RIGHT"/>

</LinearLayout>

解决方案

Check Murphy's answer on this question. You need to override PagerAdapter's getPageWidth() method on your PagerAdapter class, like this for example:

@Override
public float getPageWidth(int page) {
    if(page==0) {
        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        return (float)LEFT_FRAGMENT_PIXEL_WIDTH / size.x;
    }
    else
        return super.getPageWidth(page);
}

这篇关于布局Android的不同宽度的ViewPager的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆