Как сделать автоматический подсчет диапазона и размера иконки - PullRequest
0 голосов
/ 08 ноября 2018

Я использую вид рециркулятора и вид карты для отображения значков в моем приложении. Я не могу понять, как изменить размеры значков приложений и увеличить / уменьшить количество пролетов автоматически в зависимости от размера экрана. Вот то, что я делаю, чтобы отобразить его, и счетчик трат фиксируется на 3.

    RecyclerView mrv = (RecyclerView) findViewById(R.id.recyclerview_id);
    RecyclerViewAdapter myAdapter = new RecyclerViewAdapter(this, lsStore);
    mrv.setLayoutManager(new GridLayoutManager(this, 3));
    mrv.setAdapter(myAdapter);

XML ниже

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cardview_id"
android:clickable="true"
android:foreground="?selectableItemBackground"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:cardview="http://schemas.android.com/apk/res-auto"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginTop="15dp"
android:layout_marginVertical="20dp"
cardview:cardCornerRadius="6dp">


<android.support.v7.widget.LinearLayoutCompat
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <ImageView
        android:id="@+id/store_image_id"
        android:layout_width="wrap_content"
        android:layout_height="110dp"
        android:scaleType="centerCrop"
        android:background="#2D2D2D"/>

    <TextView
        android:id="@+id/store_name_id"
        android:textColor="#2d2d2d"
        android:textSize="13sp"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/StoreTitle"/>


</android.support.v7.widget.LinearLayoutCompat>

Приложение отлично работает на экране размером от 5 "5" до 6 ", но на экранах меньшего / большего размера значки выглядят грязными. Может кто-нибудь подсказать, пожалуйста, как этого добиться?

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете рассчитать количество столбцов. Определите статическую функцию для вычисления количества столбцов как:

public class Utility {
    public static int calculateNoOfColumns(Context context) {
        DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
        float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
        int noOfColumns = (int) (dpWidth / 180);
        // Where 180 is the width of your grid item. You can change it as per your convention.
        return noOfColumns;
    }
}

И затем, при использовании GridLayoutManager в упражнении или фрагменте, вы можете сделать так:

int mNoOfColumns = Utility.calculateNoOfColumns(getApplicationContext());

// Some code...

mGridLayoutManager = new GridLayoutManager(this, mNoOfColumns);
mRecyclerView.setLayoutManager(mGridLayoutManager);

// Some code...

Надеюсь, это вам поможет.

...