ورود

View Full Version : تنظیم ستون GridView برای رزولوشن های مختلف



rezano
شنبه 11 مهر 1394, 01:03 صبح
با سلام
من یه Grid View دارم که در حالت Portrait دو تا ستون رو بهم نشون میده. محتوای توی Grid View توسط یه اکتیویتی دیگه پر میشه که اونجا برای هر آیتم مقدار ثابت 180 رو تعیین کردم یعنی عرض هر ستون میشه 180 .
می خوام توی حالت Landscape که عرض گوشی بزرگتر میشه و یا مثلا روی تبلت اگه اجرا بشه با توجه به فضای خالی که ایجاد میشه تعداد ستون ها بیشتر بشه.
توی تنظیمات Grid View هم مقدار تعداد ستون ها رو روی auto_fit گزاشتم.


MainActivity.java

public class MainActivity extends AppCompatActivity {

ArrayList<Person> PersonList = new ArrayList<Person>();
GridView myGridView;
GridViewAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

myGridView = (GridView) findViewById(R.id.gridView);

PersonList.add(CreatePerson("Ali", "ali_pic"));
PersonList.add(CreatePerson("Reza","reza_pic"));
PersonList.add(CreatePerson("hasan","hasan_pic"));
PersonList.add(CreatePerson("saeed","saeed_pic"));
PersonList.add(CreatePerson("Ali", "ali_pic"));
PersonList.add(CreatePerson("Reza","reza_pic"));
PersonList.add(CreatePerson("hasan","hasan_pic"));
PersonList.add(CreatePerson("saeed","saeed_pic"));

adapter = new GridViewAdapter(this, PersonList);
myGridView.setAdapter(adapter);
}

public Person CreatePerson (String _name,String _pic)
{
Person tempPerson = new Person();
tempPerson.name=_name;
tempPerson.pic=_pic;

return tempPerson;
}
}




GridViewAdapter.java

public class GridViewAdapter extends BaseAdapter {

Context mContext;
LayoutInflater inflater;
private List<Person> PersonList = null;
private ArrayList<Person> arraylist;

public GridViewAdapter(Context context, List<Person> oillist) {
mContext = context;
this.PersonList = oillist;
inflater = LayoutInflater.from(mContext);
this.arraylist = new ArrayList<Person>();
this.arraylist.addAll(oillist);
}

public class ViewHolder {
TextView name;
ImageView pic;
}

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

@Override
public Person getItem(int position) {
return PersonList.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

public View getView(final int position, View view, ViewGroup parent) {
final ViewHolder holder;
if (view == null) {
holder = new ViewHolder();
view = inflater.inflate(R.layout.gridview_item, null);
holder.name = (TextView) view.findViewById(R.id.txt_Name);
holder.pic = (ImageView) view.findViewById(R.id.img_pic);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.name.setText(PersonList.get(position).name) ;
holder.pic.setImageResource(R.mipmap.ic_launcher);
return view;
}
}


Person.java

public class Person
{
public String name;
public String pic;
}



activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<GridView
android:id="@+id/gridView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:contextClickable="true"
android:stretchMode="columnWidth"
android:textAlignment="center"
android:smoothScrollbar="true"
android:scrollingCache="true"
android:numColumns="auto_fit">
</GridView>
</RelativeLayout>



gridview_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="180dp"
android:layout_height="205dp"
android:orientation="vertical"
android:padding="1dp"
android:gravity="left|top"
android:baselineAligned="false">

<ImageView
android:id="@+id/img_pic"
android:layout_width="180dp"
android:layout_height="180dp"
android:src="@mipmap/ic_launcher"
android:layout_gravity="center">
</ImageView>
<TextView
android:id="@+id/txt_Name"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:text="Name"
android:textStyle="bold"
android:gravity="center"
android:layout_gravity="center">
</TextView>
</LinearLayout>



http://8pic.ir/images/glil9atber5qbuw772zb_thumb.png (http://8pic.ir/viewer.php?file=glil9atber5qbuw772zb.png)http://8pic.ir/images/v79eyay7s1hcab0n9z76_thumb.png (http://8pic.ir/viewer.php?file=v79eyay7s1hcab0n9z76.png)

Mostefea1372
شنبه 11 مهر 1394, 02:18 صبح
سلام


اولا که کد xml شما یه جوری شده که توی سایز های مختلف به مشکل می خوری ......


چند روش برای حل مشکلت داری

اول این که یه xml برای حالت های مختلف صفحه نمایش طراحی بکنی ..... مثلا یکی مخصوص Landscape و یکی برای Portrait


دوم کدت رو طوری بزنی که با طول عرض صفحه نمایش گوشی سطر و ستون های گرید رو تغییر بده



سوم برای اندازه صفحات نمایش مختلف یه Xml طراحی بکنی مثلا برای larg یک لایوت و برای xlarg یکی دیگه

روش های دیگه ای هم وجود داره که با یکم فکر خودت می فهمی جریان چیه و باید چکار بکنی ...... مثلا چندتا اداپتر طراحی بکنی با استفاده از طول عرض صفحه نمایش یه اداپتر رو لود کنی و خیلی روش های دیگه


البته مورد یک و سه هم حوصله ات سر میره هم حجم نرم افزارت زیاد میشه

من مورد دو رو پیشنهاد می کنم ....


ببخش یکم طولانی شد

rezano
شنبه 11 مهر 1394, 11:20 صبح
ممنون از جوابتون
منم دقیقا می خوام تعداد ستون های گرید ویو متغیر باشه
یعنی تا جایی که فضای داره و میشه، اتوماتیک ستون اضافه بشه ولی راه حلش رو نمی دونم
اگه میشه یه کد برای مثال بزارید
با تشکر

rezano
شنبه 11 مهر 1394, 21:35 عصر
دوستان راه حلی ندارید؟ :ناراحت:

Mostefea1372
شنبه 11 مهر 1394, 23:59 عصر
سلام دوست عزیز همونا که گفتم راه حل این مسئله هستش ..... فکر نکنم کسی سورسی در خدمتتون بزاره البته خیلی وقته انجمن از شور شوق قبلیش کم شده ...... وگر نه جواب میداندنمثال های گرید زیاده توی نت بگرد ...... بالاخره برنامه نویسی یعنی بازی با کد ...... با کد ها بازی کن مطمعا باش موفق میشی و با کوله باری از تجربه برای آیندت .