2015-04-24 2 views
0

Я пытаюсь изменить размер моего ViewPager зависит от размера экрана устройства. My ViewPager находится в центре экрана и имеет ширину 300 дБ. Я хочу, чтобы высота размера ViewPager изменялась в зависимости от размера экрана. Под моим ViewPager у него есть ImageView, этот ImageView охватывает часть моего ViewPager.Как изменить размер моего ViewPager зависит от размера экрана?

В моей activity_main.xml

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="300dp" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/img_memtext" 
    android:layout_centerHorizontal="true"/> 


<com.viewpagerindicator.CirclePageIndicator 
    android:id="@+id/indicator" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/pager" 
    android:layout_centerHorizontal="true"/> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="50dp" 
    android:background="@drawable/notification_bg" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignTop="@+id/attention" 
    android:layout_below="@id/indicator"/> 

В моей viewpager_item.xml

<?xml version="1.0" encoding="utf-8"?> 

    <ScrollView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="300dp" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="10dp" 
     android:layout_marginLeft="10dp" 
     android:layout_marginTop="5dp" 
     android:background="#ffffffff" 
     android:isScrollContainer="true" 
     android:fillViewport="true" 
     android:layout_gravity="center" 
     > 

     <RelativeLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="5dp" 
      > 

      <ImageView 
       android:layout_width="280dp" 
       android:layout_height="100dp" 
       android:id="@+id/news_image" 
       android:layout_centerHorizontal="true"/> 

      <TextView 
       android:id="@+id/news_title" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:textStyle="bold" 
       android:textSize="18dp" 
       android:layout_below="@+id/news_image"/> 

      <TextView 
       android:id="@+id/space" 
       android:layout_width="20dp" 
       android:layout_height="20dp" 
       android:gravity="center" 
       android:layout_below="@+id/news_title" 
       /> 

      <TextView 
       android:id="@+id/news_body" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/news_title" 
       android:textSize="14dp"/> 

      <TextView 
       android:id="@+id/read_more" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/news_body" 
       android:textColor="#ff28c0ff" 
       android:clickable="true" 
       android:textSize="14dp"/> 

     </RelativeLayout> 

    </ScrollView> 

Может кто-нибудь может мне помочь, пожалуйста? Большое спасибо.

+0

Попробуйте проверить https://stackoverflow.com/questions/21627150/android-auto-resize-view-for-small-screen – DeJaVo

ответ

1

Используйте LinearLayout с высотой и шириной match_parent, чтобы обернуть ваш ViewPager и другие виды, которые вы хотите находиться в той же строке или столбце, что и ваш ViewPager. Удалите явные измерения, затем добавьте свойство layout_weight в представления, обернутые LinearLayout. More information on layout_weight in LinearLayout.

Если вы хотите, чтобы поддерживать широкий спектр экранов размеров и разрешений, я предлагаю вам прочитать this article и глубже в android developers website для наилучшей практики и инструкции, чтобы сделать ваше приложение вести себя водоворот на (почти) всех размеров экрана.

+0

Должен ли я использовать wrap_content для моего ViewPager? –

+0

Я удалил свои явные измерения и просто использовал wrap_content на моем ViewPager, а также добавил layout_weight в свой ViewPager. Я поместил свой ViewPager в LinearLayout, и теперь он распространяется на то, что я хотел, но при тестировании его на более мелкие устройства моя проблема все еще возникает. –

+0

Нет, вы не должны использовать wrap_content для Viewpager, так как вы не хотите, чтобы размер вашего ViewPager менялся, когда вы находитесь на более мелкой странице просмотра. И я думаю, вы не можете предсказать размер содержимого ViewPager. Вы должны установить его в match_parent. Но, как я уже сказал, если ваш ViewPager находится в LinearLayout с layout_weight, если ориентация LinearLayout вертикальная, вы не должны указывать какую-либо высоту для вашего ребенка LinearLayout. Если ваша ориентация LinearLayout горизонтальная, такая же, но для ширины. Не забудьте добавить layout_weight для всех дочерних элементов в этом случае. И не смотрите на уродливый код @ 이남웅 –

0

Я делаю некоторый класс для изменения размера и высоты представления вида. Мне не нравится блок Dp. это сложно для меня, все приспособления подходят.

здесь часть моего класса:

public class SetViewScale { 
    private static SetViewScale instance; 
    public int height, width; //device height, width 
    public final static int Full_w = 720; // base on design 
    public final static int Full_h = 1230; //base on design 

private SetViewScale(Activity a){ 
    DisplayMetrics displayMetrics = new DisplayMetrics(); 
    a.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
    int deviceWidth = displayMetrics.widthPixels; 
    int deviceHeight = displayMetrics.heightPixels; 
    this.width = deviceWidth; 
    this.height = deviceHeight; 
} 
private SetViewScale(WindowManager wm){ 
    DisplayMetrics displayMetrics = new DisplayMetrics(); 
    wm.getDefaultDisplay().getMetrics(displayMetrics); 
    int deviceWidth = displayMetrics.widthPixels; 
    int deviceHeight = displayMetrics.heightPixels; 
    this.width = deviceWidth; 
    this.height = deviceHeight; 
} 

public synchronized static SetViewScale getInstance(Activity a){ 
    if(instance == null) 
     instance = new SetViewScale(a); 
    return instance; 
} 
public synchronized static SetViewScale getInstance(WindowManager wm){ 
    if(instance == null) 
     instance = new SetViewScale(wm); 
    return instance; 
} 

public synchronized static SetViewScale getInstance(){ 
    if(instance == null) { 
     WindowManager wm = (WindowManager) AppManager.context.getSystemService(Context.WINDOW_SERVICE); 
     instance = new SetViewScale(wm); 
    } 
    return instance; 
} 
/** 
* view resizing device width height 
* @param view 
* @param w 
* @param h 
* @return 
*/ 
public View setViewScale(View view, int w, int h) { 
    int setW, setH; 

    int x = width * w; 
    setW = (int)(x/Full_w); 
    int y = h*setW; 
    setH = (int)(y/w); 
    ViewParent parent = view.getParent(); 
    if(parent instanceof LinearLayout){ 
     LinearLayout.LayoutParams lp = (LayoutParams) view.getLayoutParams(); 
     lp.width = setW; 
     lp.height = setH; 
     view.setLayoutParams(lp); 
    }else if(parent instanceof RelativeLayout){ 
     RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)view.getLayoutParams(); 
     lp.width = setW; 
     lp.height = setH; 
     view.setLayoutParams(lp); 
    }else if(parent instanceof FrameLayout){ 
     FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams)view.getLayoutParams(); 
     lp.width = setW; 
     lp.height = setH; 
     view.setLayoutParams(lp); 
    }else if(parent instanceof AbsListView){ 
     AbsListView.LayoutParams lp = (AbsListView.LayoutParams)view.getLayoutParams(); 
     lp.width = width; 
     lp.height = height; 
     view.setLayoutParams(lp); 
    }else{ 
     return null; 
    } 
    return view; 
} 
public View setFillWidthScale(View view, int w, int h) { 
    int setW, setH; 

    int x = width * w; 
    setW = (int)(x/Full_w); 
    int y = h*setW; 
    setH = (int)(y/w); 
    ViewParent parent = view.getParent(); 
    if(parent instanceof LinearLayout){ 
     LinearLayout.LayoutParams lp = (LayoutParams) view.getLayoutParams(); 
     lp.width = LayoutParams.MATCH_PARENT; 
     lp.height = setH; 
     view.setLayoutParams(lp); 
    }else if(parent instanceof RelativeLayout){ 
     RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)view.getLayoutParams(); 
     lp.width = RelativeLayout.LayoutParams.MATCH_PARENT; 
     lp.height = setH; 
     view.setLayoutParams(lp); 
    }else if(parent instanceof FrameLayout){ 
     FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams)view.getLayoutParams(); 
     lp.width = FrameLayout.LayoutParams.MATCH_PARENT; 
     lp.height = setH; 
     view.setLayoutParams(lp); 
    }else if(parent instanceof AbsListView){ 
     AbsListView.LayoutParams lp = (AbsListView.LayoutParams)view.getLayoutParams(); 
     lp.width = width; 
     lp.height = height; 
     view.setLayoutParams(lp); 
    }else{ 
     return null; 
    } 
    return view; 
} 

использование точек блока.

Надеюсь, это какой-то намек на вас.

 Смежные вопросы

  • Нет связанных вопросов^_^