Android Studio: исправьте положение спиннера со стрелкой вниз - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь установить положение стрелки вниз счетчика внутри пользовательского адаптера.

Содержимое счетчика - это количество продуктов, доступных для продажи.Но, как видно на рисунке, значок со стрелкой вниз остался ниже содержимого и толкает другой TextView в макете, и я не знаю причину.

spinner

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

Вот мой xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <View
        android:id="@+id/divider"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="?android:attr/listDivider" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="4dp">

        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/item_productImage"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:src="@drawable/shopping_cart_black_48dp"/>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight=".6"
            android:orientation="vertical"
            android:layout_gravity="center_vertical">

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:weightSum="1">

                <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight=".6"
                    android:paddingLeft="4dp"
                    android:text="Codigo"
                    android:textStyle="bold"/>

                <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="0.4"
                    android:paddingLeft="3dp"
                    android:text="Qt"
                    android:textStyle="bold"/>

            </LinearLayout>

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="40dp"
                android:orientation="horizontal"
                android:weightSum="1">

                <TextView
                    android:id="@+id/item_productCode"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight=".6"
                    android:paddingLeft="4dp"
                    android:text="Code"
                    android:singleLine="true"/>

                <LinearLayout
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight=".4">

                    <Spinner
                        android:id="@+id/item_productAmountSpinner"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:paddingLeft="3dp">

                    </Spinner>

                </LinearLayout>




            </LinearLayout>

            <TextView
                android:id="@+id/item_productPrice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="4dp"
                android:text="Price"
                android:singleLine="true"/>

        </LinearLayout>

        <ImageButton
            android:id="@+id/item_productDeleted"
            android:layout_width="55dp"
            android:layout_height="35dp"
            android:src="@drawable/delete_forever_black_48dp"
            android:scaleType="fitCenter"
            android:layout_gravity="center_vertical"
            android:foregroundGravity="center"
            android:background="@null"/>

        <ToggleButton
            android:id="@+id/item_productFavorite"
            android:layout_width="40dp"
            android:layout_height="42dp"
            android:layout_marginRight="3dp"
            android:layout_gravity="center_vertical"
            android:textOff=""
            android:textOn=""
            android:background="@android:drawable/star_off"
            android:text=""/>

    </LinearLayout>

    <TextView
        android:id="@+id/item_productDescription"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Description"
        android:paddingLeft="8dp"
        android:layout_marginBottom="5dp"
        android:singleLine="true"/>

</LinearLayout>

А вот как я заполняю счетчик в специальном адаптере:

public class PurchaseListAdapter extends RecyclerView.Adapter<PurchaseListAdapter.PurchaseListViewHolder> {

    private final String[] quantityValues = new String[] { "1", "2", "3", "4",
            "5", "6", "7", "8", "9", "10" };

    ArrayList<ProductObject> purchaseList;
    Context mContext;

    public PurchaseListAdapter(Context mContext, ArrayList<ProductObject> purchaseList) {
        this.mContext = mContext;
        this.purchaseList = purchaseList;
    }

    @NonNull
    @Override
    public PurchaseListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_purchase,null,false);

        RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutView.setLayoutParams(lp);

        PurchaseListViewHolder rcv = new PurchaseListViewHolder(layoutView);

        return rcv;
    }

    @Override
    public void onBindViewHolder(@NonNull PurchaseListViewHolder holder, int position) {

        if (purchaseList.get(position).getImage() != null) {
            byte[] prodIMG = purchaseList.get(position).getImage();
            Bitmap bitmap = BitmapFactory.decodeByteArray(prodIMG,0,prodIMG.length);
            holder.mImage.setImageBitmap(bitmap);
            Log.i("debinf prodadapter", "Private Image != null for "+purchaseList.get(position).getDescription());
        } else {
            holder.mImage.setImageResource(R.drawable.shopping_cart_black_48dp);
        }

        holder.mCode.setText(purchaseList.get(position).getCode());
        holder.mPrice.setText(purchaseList.get(position).getPrice());
        holder.mDescription.setText(purchaseList.get(position).getDescription());

        ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(mContext, R.layout.support_simple_spinner_dropdown_item, quantityValues);
        spinnerAdapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
        holder.mAmount.setAdapter(spinnerAdapter);
        //holder.mAmount.setText(purchaseList.get(position).getAmount());

        holder.mFavorite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    //Toast.makeText(mContext, "You favorited " + purchaseList.get(position).getDescription(), Toast.LENGTH_SHORT).show();
                    buttonView.setBackgroundResource(android.R.drawable.star_on);
                } else {
                    //Toast.makeText(mContext, "You UNfavorited " + purchaseList.get(position).getDescription(), Toast.LENGTH_SHORT).show();
                    buttonView.setBackgroundResource(android.R.drawable.star_off);
                }
            }
        });


    }

    @Override
    public int getItemCount() {
        return purchaseList.size();
    }

    public class PurchaseListViewHolder extends RecyclerView.ViewHolder {

        public CircleImageView mImage;
        public TextView mCode, mPrice, mDescription;
        public ImageButton mProductDeleted;
        public ToggleButton mFavorite;
        public Spinner mAmount;

        public PurchaseListViewHolder(@NonNull View itemView) {
            super(itemView);

            mImage = (CircleImageView) itemView.findViewById(R.id.item_productImage);
            mCode = (TextView) itemView.findViewById(R.id.item_productCode);
            mAmount = (Spinner) itemView.findViewById(R.id.item_productAmountSpinner);
            mPrice = (TextView) itemView.findViewById(R.id.item_productPrice);
            mDescription = (TextView) itemView.findViewById(R.id.item_productDescription);
            mProductDeleted = (ImageButton) itemView.findViewById(R.id.item_productDeleted);
            mFavorite = (ToggleButton) itemView.findViewById(R.id.item_productFavorite);
        }
    }
}

Я ценю любую помощь.

PS .: Интересно, что счетчик с содержимым Ligar имеет значок стрелки вниз рядом с содержимым,но счетчик в RecyclerView не имеет.

...