2016-01-11 2 views
0

Итак .. Я сейчас пытаюсь изменить два вида внутри ViewPager, чтобы взять половину размера ViewPager. Сам размер ViewPager составляет 75% от размера экрана.Android - Изменение размера представления внутри viewpager

Вот часть кода XML для ViewPager

<RelativeLayout 
     android:id="@+id/activity_main_relativeViewPagerWrapper" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentTop="true" 
     android:fillViewport="true" 
     android:measureAllChildren="false" 
     android:scrollbars="none" > 

     <android.support.v4.view.ViewPager 
      android:id="@+id/activity_main_pager" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_alignParentTop="true" /> 

    </RelativeLayout> 

Вот ViewPagerAdapter как адаптер для ViewPager

public class ViewPagerAdapter extends PagerAdapter { 
    // Declare Variables 
    Context context; 
    int[] title; 
    int[] message; 
    int[] background; 
    int[] image; 
    LayoutInflater inflater; 

    public ViewPagerAdapter(Context context, int[] title, int[] message, 
          int[] background, int[] image) { 
     this.context = context; 
     this.title = title; 
     this.message = message; 
     this.background = background; 
     this.image = image; 
    } 

    @Override 
    public int getCount() { 
     return title.length; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == ((RelativeLayout) object); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 

     // Declare Variables 
     TextView titleText; 
     TextView messageText; 
     RelativeLayout slidingBackground; 
     ImageView slidingImage; 

     inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View itemView = inflater.inflate(R.layout.viewpager_item, container, 
       false); 

     // Locate the TextViews in viewpager_item.xml 
     titleText = (TextView) itemView.findViewById(R.id.viewpager_item_titleText); 
     messageText = (TextView) itemView.findViewById(R.id.viewpager_item_messageText); 

     // Capture position and set to the TextViews 
     titleText.setText(title[position]); 
     messageText.setText(message[position]); 

     // Locate the ImageView in viewpager_item.xml 
     slidingBackground = (RelativeLayout) itemView.findViewById(R.id.viewpager_item_slidingBackground); 
     slidingImage = (ImageView) itemView.findViewById(R.id.viewpager_item_slidingImage); 
     // Capture position and set to the ImageView 
     slidingBackground.setBackgroundResource(background[position]); 
     slidingImage.setImageResource(image[position]); 

     // Add viewpager_item.xml to ViewPager 
     ((ViewPager) container).addView(itemView); 

     return itemView; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     // Remove viewpager_item.xml from ViewPager 
     ((ViewPager) container).removeView((RelativeLayout) object); 

    } 
} 

LayoutResize класса

public class LayoutResize extends Activity{ 

    public DisplayMetrics displayMetrics = new DisplayMetrics(); 

    public int width(int sizeX, DisplayMetrics displayMetrics) 
    { 
     int screenWidth = displayMetrics.widthPixels * sizeX/100; 
     return screenWidth; 
    } 

    public int height(int sizeY, DisplayMetrics displayMetrics) 
    { 
     int screenHeight = displayMetrics.heightPixels * sizeY/100; 
     return screenHeight; 
    } 
} 

Anddd главный класс, где Я изменяю размеры макетов

RelativeLayout mainLayout = (RelativeLayout)findViewById(R.id.activity_main_mainLayout); 
     //RelativeLayout viewPagerItem = (RelativeLayout)findViewById(R.id.viewPagerItem); 
     LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View pagerItemInflater = inflater.inflate(R.layout.viewpager_item, mainLayout); 
     View viewpager_items = inflater.inflate(R.layout.viewpager_item, mainLayout, true); 
     //setContentView(pagerItemInflater); 

     getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
     LayoutResize layoutResize = new LayoutResize(); 

     RelativeLayout relativeViewPager =(RelativeLayout) findViewById(R.id.activity_main_relativeViewPagerWrapper); 
     int relativeViewPagerHeight = layoutResize.height(75, displayMetrics); 
     RelativeLayout.LayoutParams viewPagerParams = (RelativeLayout.LayoutParams)relativeViewPager.getLayoutParams(); 
     viewPagerParams.height = relativeViewPagerHeight; 
     relativeViewPager.setLayoutParams(viewPagerParams); 

     RelativeLayout slidingBackground =(RelativeLayout) pagerItemInflater.findViewById(R.id.viewpager_item_slidingBackground); 
     int slidingBackgroundHeight = layoutResize.height(38, displayMetrics); 
     ViewGroup.LayoutParams slidingBackgroundParams = slidingBackground.getLayoutParams(); 
     slidingBackgroundParams.height = slidingBackgroundHeight; 
     slidingBackground.setLayoutParams(slidingBackgroundParams); 

     RelativeLayout slidingImageWrapper = (RelativeLayout) pagerItemInflater.findViewById(R.id.viewpager_item_slidingImageWrapper); 
     int slidingImageWrapperHeight = layoutResize.height(37, displayMetrics); 
     RelativeLayout.LayoutParams slidingImageWrapperParams = (RelativeLayout.LayoutParams)slidingImageWrapper.getLayoutParams(); 
     slidingImageWrapperParams.height = slidingImageWrapperHeight; 
     slidingImageWrapper.setLayoutParams(slidingImageWrapperParams); 

Оба slidingImageWrapper и slidingBackground находятся внутри ViewPager. Их размеры не меняются, когда я помещаю их на 37% и 38% соответственно.

Я делаю вещи неправильно здесь? Как я могу изменить представление внутри самого адаптера? Или это даже невозможно? Если это невозможно, то .. Любое предложение?

UPDATE: ViewPager Это Activity с помощью ViewPager. Все выше серой коробки является ViewPager, который может скользить вокруг ViewPager. The grey box takes approximately 20% of screen height, the orange box takes approximately 30% of screen height, and the rest is 50%. The orange box is made up of RelativeLayout wrapping TextView . The problem is by wrapping it, the orange box will not have a fixed size. It depends on the TextView .. I want it to take 30% of the screen using displayMetrics` ..

Update:

Вот мой текущий адаптер пейджера

public class MainActivityViewPagerAdapter extends PagerAdapter { 

    // Declare Variables 
    private Context context; 
    List<MainActivityModel> mDataset = new ArrayList<>(); 

    public MainActivityViewPagerAdapter(Context context) { 
     this.context = context; 
     this.mDataset = MainActivityDataSource.getData(context); 
    } 

    @Override 
    public int getCount() { 
     return mDataset.size(); 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == object; 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 

     // Declare Variables 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View itemView = inflater.inflate(R.layout.viewpager_mainactivity, container, 
       false); 

     // Sliding Background 
     ImageView slidingBackground = (ImageView)itemView.findViewById(R.id.viewpager_mainactivity_slidingBackground); 
     slidingBackground.setImageResource(mDataset.get(position).background); 

     // Sliding MI 
     ImageView slidingMI = (ImageView)itemView.findViewById(R.id.viewpager_mainactivity_miImage) ; 
     slidingMI.setImageResource(mDataset.get(position).imageMI); 

     // Sliding Title 
     OpenSansFont slidingTitle = (OpenSansFont)itemView.findViewById(R.id.viewpager_mainactivity_titleText); 
     slidingTitle.setText(Utilities.openSansFontify(context, Constants.semiBold, mDataset.get(position).title)); 

     slidingTitle.setTextSize((int) (context.getResources().getDimension(R.dimen.font_size_large)/context.getResources().getDisplayMetrics().density)); 
     slidingMI.setVisibility(View.GONE); 

     if (position == mDataset.size() - 1){ 
      slidingMI.setVisibility(View.VISIBLE); 
      slidingTitle.setText(Utilities.openSansFontify(context, Constants.regular, mDataset.get(position).title)); 
      slidingTitle.setTextSize((int) (context.getResources().getDimension(R.dimen.font_size)/context.getResources().getDisplayMetrics().density)); 
     } 

     // Add viewpager_mainactivityvity.xml to ViewPager 
     container.addView(itemView); 

     return itemView; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     // Remove viewpager_mainactivityvity.xml from ViewPager 
     container.removeView((RelativeLayout) object); 
    } 
} 
+0

Почему вы хотите, чтобы дети 'ViewPager' были меньше, чем' ViewPager'? Почему сокращение ViewPager само не достаточно хорошо? Целью ViewPager является управление переключением между дочерними элементами.Таким образом, по сути, каждый ребенок будет иметь тот же размер, что и ViewPager. Кроме того, что останется в оставшемся пространстве? – frozenkoi

+0

Обновлен вопрос, причина здесь указана :) Возможно ли это? –

ответ

0

Я нашел ответ! Надеюсь, людям с подобной проблемой будет помогать следующее:

Я не понял, что на самом деле все было инициализировано в адаптере и использовано в основном макете. Плохо, что нужно делать, когда вы используете чужой адаптер и только зная, как изменить значение в адаптере, не , как это работает

Так я добавил обычный вызов к раскладке в ViewPagerAdapter

RelativeLayout slidingBackground = (RelativeLayout) itemView.findViewById(R.id.viewpager_item_slidingBackground); 

А потом сделать питания к ней, как ..

slidingBackground = (RelativeLayout) itemView.findViewById(R.id.viewpager_item_slidingBackground); 
     int slidingBackgroundHeight = layoutResize.height(30); 
     ViewGroup.LayoutParams slidingBackgroundParams = slidingBackground.getLayoutParams(); 
     slidingBackgroundParams.height = slidingBackgroundHeight; 

Те сделаны внутри ViewPagerAdapter

Поэтому я не могу изменить значения через класс, который используется ViewPager, но мне нужно изменить значение самого адаптера.

+0

Можете ли вы разместить адаптер ViewPager? – murt

+0

@murt Да, я собираюсь опубликовать его сейчас, но он сильно отличается от того, что было в январе, дизайн изменился, и я сменил несколько вещей –

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