1

Я использую шахматный менеджер компоновки сетки, чтобы установить шахматную сетку в моем приложении, я использовал Imageview внутри «вид карты». Эффект в шахматном порядке работает правильно, но в некоторых случаях, когда размер изображения слишком велик, тогда макет будет похож на этоКак установить Разметку сетки в разных размерах экрана.?

[! [введите описание изображения здесь] [1]] [1]

мой XML файл

<android.support.v7.widget.CardView 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/card_view" 
android:layout_width="220dp" 
android:layout_height="180dp" 
card_view:cardUseCompatPadding="true" 
card_view:cardCornerRadius="8dp" 
android:layout_marginBottom="16dp"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:id="@+id/country_photo" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:contentDescription="@string/action_settings" 
     android:src="@drawable/three" 

     android:scaleType="centerCrop" /> 

    <ImageView 
     android:id="@+id/outside_imageview" 
     android:layout_width="24dp" 
     android:layout_height="24dp" 
     android:layout_marginBottom="8dp" 
     android:layout_marginRight="8dp" 

     android:src="@drawable/varified" 
     android:layout_alignBottom="@id/country_photo" 

     android:layout_alignRight="@id/country_photo" 
     android:scaleType="fitEnd" /> 
</RelativeLayout> 

ширина cardview является 220dp и высотой 180 дп , а ширина изображения = «match_parent» и height = «wrap_content» также тип шкалы - centerCrop, это нормально работает для изображений небольшого размера. Макет будет выглядеть как снимок экрана в случае больших изображений. Как решить эту проблему?

Зрение, как показано ниже, на малогабаритных устройствах

ответ

1

установить различное количество столбцов на большой экран "компоновщик, нормальный вид экрана, и etc.Check размера экрана устройства маленького экрана компоновщика программным способ с помощью этого кода.

public void checkScreenSize() 
{ 

int screenSize = getResources().getConfiguration().screenLayout & 
     Configuration.SCREENLAYOUT_SIZE_MASK; 
String toastMsg; 
switch (screenSize) { 
     case Configuration.SCREENLAYOUT_SIZE_XLARGE: 
      toastMsg = "XLarge screen"; 

      //set action 

      break; 
     case Configuration.SCREENLAYOUT_SIZE_UNDEFINED: 
      toastMsg = "XLarge screen"; 
       //set action 
      break; 
     case Configuration.SCREENLAYOUT_SIZE_LARGE: 
      toastMsg = "Large screen"; 
      //set action 
      break; 

     case Configuration.SCREENLAYOUT_SIZE_NORMAL: 
      toastMsg = "Normal screen"; 
      //set action 
      break; 
     case Configuration.SCREENLAYOUT_SIZE_SMALL: 
      //set action 
      toastMsg = "Small screen"; 
      break; 
     default: 
      toastMsg = "Screen size is neither large, normal or small"; 



} 
0

Ниже приведены некоторые основные шаги, чтобы создать ступенчатое сетку в уйму технологии-

Создать представление.

Set StaggeredGridLayout LayoutManager.

Адаптер для раздувания взглядов в шахматном порядке.

1- Создать view-

Как мы знаем, staggeredgrid не является прямым взглядом это LayoutManager, что выкладывает ребенок в формировании шахматнога сетки. Мы используем RecyclerView как представление для сетки staggerd.

Вот наш recyclerview в layout-

<relativelayout android:layout_height="match_parent" android:layout_width="match_parent" android:paddingtop="@dimen/activity_vertical_margin" tools:context="com.deepanshu.staggered_gridlayout.MainActivity" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> 

    <android.support.v7.widget.recyclerview android:id="@+id/favPlaces" android:layout_height="match_parent" android:layout_width="match_parent"> 
</android.support.v7.widget.recyclerview></relativelayout> 
2- Set StaggeredGridLayout LayoutManager- 
Our view is ready, let's use Layoutmanager to create grids on the view. 


RecyclerView favPlaces = (RecyclerView) findViewById(R.id.favPlaces); 
     StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL); 
     layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE); 
     favPlaces.setLayoutManager(layoutManager); 
     favPlaces.setHasFixedSize(true); 
3- Adapter to inflate the staggeredgrid views- 
To inflate the data in form of grid first we need a layout which will represent that data.We are using CardView for this and the layout is- 

<android.support.v7.widget.cardview android:layout_height="wrap_content" android:layout_width="match_parent" app:cardcornerradius="4dp" app:cardusecompatpadding="true"> 
     <linearlayout android:background="@color/colorPrimary" android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical"> 

      <imageview android:adjustviewbounds="true" android:id="@+id/placePic" android:layout_height="match_parent" android:layout_width="match_parent" android:scaletype="fitXY"> 

      <textview android:gravity="center" android:id="@+id/placeName" android:layout_height="wrap_content" android:layout_width="match_parent" android:textsize="16sp"> 


    </textview></imageview></linearlayout> 
</android.support.v7.widget.cardview> 

</linearlayout> 
Now we have our layout to inflate the data. Let's bind the data on view with the help of adapter- 

public class StaggeredAdapter extends 
RecyclerView.Adapter 
<staggeredadapter.viewholder>{ 

    private ArrayList<placedetails> placeList; 
    // Provide a reference to the views for each data item 
    public static class ViewHolder extends RecyclerView.ViewHolder { 

     public TextView placeName; 
     public ImageView placePic; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      placeName = (TextView) itemView.findViewById(R.id.placeName); 
      placePic = (ImageView) itemView.findViewById(R.id.placePic); 
     } 
    } 

    public StaggeredAdapter(ArrayList<placedetails> placeList){ 
     this.placeList = placeList; 
    } 


    // Create new views (invoked by the layout manager) 
    @Override 
    public StaggeredAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
                int viewType) { 
     // create a new view 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.staggered_layout, parent, false); 
     // set the view's size, margins, paddings and layout parameters 
     return new ViewHolder(v); 
    } 

    // Replace the contents of a view (invoked by the layout manager) 
    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 

     holder.placeName.setText(placeList.get(position).getName()); 
     holder.placePic.setImageResource(placeList.get(position).getImageUrl()); 


    } 

    // Return the size of your dataset (invoked by the layout manager) 
    @Override 
    public int getItemCount() { 
     return placeList.size(); 
    } 
} 
</staggeredadapter.viewholder> 

Мы установка наших всех основных шагов, настало время для завершения нашей основной деятельности. здесь полный код основной деятельности-

public class MainActivity extends AppCompatActivity { 

    int placeImage[]= {R.drawable.agattia_airport_lakshadweep,R.drawable.nainital,R.drawable.goa, 
      R.drawable.lotus_temple,R.drawable.valley_of_flowers,R.drawable.ranikhet,R.drawable.dehradun,R.drawable.nainital1}; 

    String placeName[]= {"Lakshadweep, India","Nainital, India","Goa, India","Lotus-Temple, India","Valley-Of-Flowers, India","Ranikhet, India", 
    "Dehradun, India","Nainital, India"}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     RecyclerView favPlaces = (RecyclerView) findViewById(R.id.favPlaces); 
     StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL); 
     layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE); 
     favPlaces.setLayoutManager(layoutManager); 
     favPlaces.setHasFixedSize(true); 
     ArrayList<PlaceDetails> placeList = getPlaces(); 

     StaggeredAdapter staggeredAdapter = new StaggeredAdapter(placeList); 
     favPlaces.setAdapter(staggeredAdapter); 
    } 

    private ArrayList<PlaceDetails> getPlaces() { 
     ArrayList<PlaceDetails> details = new ArrayList<>(); 
     for (int index=0; index<placeImage.length;index++){ 
      details.add(new PlaceDetails(placeImage[index],placeName[index])); 
     } 
     return details; 
    } 
} 
Смежные вопросы