Итак .. Я сейчас пытаюсь изменить два вида внутри 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: Это 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);
}
}
Почему вы хотите, чтобы дети 'ViewPager' были меньше, чем' ViewPager'? Почему сокращение ViewPager само не достаточно хорошо? Целью ViewPager является управление переключением между дочерними элементами.Таким образом, по сути, каждый ребенок будет иметь тот же размер, что и ViewPager. Кроме того, что останется в оставшемся пространстве? – frozenkoi
Обновлен вопрос, причина здесь указана :) Возможно ли это? –