0

I have an custom adapter layout resourse file for my ListView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@android:color/white"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical" 
    android:textSize="30sp"
    >


    <TextView
        android:gravity="center"
        android:id="@+id/place"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:fontFamily="sans-serif-light"
        android:textColor="@android:color/black"
        android:textSize="20dp"

        />

    <TextView
        android:id="@+id/name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="5"
        android:fontFamily="sans-serif-light"
        android:textColor="@android:color/black"
        android:textSize="20dp"
        />


    <TextView
        android:id="@+id/rating"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:fontFamily="sans-serif-light"
        android:textColor="@android:color/black"
        android:layout_marginRight="10dp"
        android:layout_weight="2"
        android:textSize="20sp"
        android:gravity="right"

        />
</LinearLayout>

Design section in android studio is showing this layout as I want it to be. When I run it on devices with API level 25 and higher my ListView shows as I wanted it to be as well. But when it comes to API level 24 and lower, "output" of my layout file is totally broken. I'll attach 2 screenshot.

1) Expected behavior (API level 25+):

enter image description here

2) Failed behavior, everything is broken (API level 24-):

enter image description here

Code of My Adapter:

package com.SamsungProject.SamsungProject;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import org.w3c.dom.Text;

import java.util.List;

public class PlayerRatingAdapter extends ArrayAdapter<PlayerRating> {

    private static final String TAG = "PlayerRatingAdapter";

    private Context mContext;
    int mResource;

    public PlayerRatingAdapter(@NonNull Context context, int resource, @NonNull List<PlayerRating> objects) {
        super(context, resource, objects);
        mContext = context;
        mResource = resource;


    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView,@NonNull ViewGroup parent) {
        int place = getItem(position).getPosition();
        String name = getItem(position).getName();
        int rating = getItem(position).getRating();

        PlayerRating rating_of_player = new PlayerRating(name, rating, place);
        LayoutInflater inflater = LayoutInflater.from(mContext);
        convertView = inflater.inflate(mResource, parent, false);

        TextView placeView = (TextView) convertView.findViewById(R.id.place);
        TextView nameView = (TextView) convertView.findViewById(R.id.name);
        TextView ratingView = (TextView) convertView.findViewById(R.id.rating);

        placeView.setText(Integer.toString(place));
        nameView.setText(name);
        ratingView.setText(Integer.toString(rating));

        return convertView;


    }
}

What is the problem and how to get rid of differences in layout's behavior?

1 Answers1

0

Hi Please try the below code once and let me know if you face any problem

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@android:color/white"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    >


    <TextView
        android:gravity="center"
        android:id="@+id/place"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:fontFamily="sans-serif-light"
        android:textColor="@android:color/black"
        android:textSize="20sp"

        />

    <TextView
        android:id="@+id/name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="5"
        android:fontFamily="sans-serif-light"
        android:textColor="@android:color/black"
        android:textSize="20sp"
        />


    <TextView
        android:id="@+id/rating"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:fontFamily="sans-serif-light"
        android:textColor="@android:color/black"
        android:layout_marginEnd="10dp"
        android:layout_weight="2"
        android:textSize="20sp"
        android:gravity="end"

        />
</LinearLayout>

or you can use percentage relative layout for better result.

Ritu Suman Mohanty
  • 734
  • 1
  • 6
  • 15
  • This code still doesn't work good on API 24.https://drive.google.com/file/d/1nUHsxfUL9Ha4GyzTqO6fQnSLLZMJhyHJ/view?usp=sharing –  May 16 '20 at 20:55