пользовательский шрифт не загружается в listView диалога - PullRequest
0 голосов
/ 10 января 2019

Я определил папку шрифтов и XML-файл в папке drawable. Я использую диалог и определил List_view.xml и List_item.xml для появления диалога; Однако пользовательский шрифт, определенный в list_item.xml, не загружается во время отображения диалога; По умолчанию отображается шрифт Android.

Я пытался изменить шрифт по умолчанию для всего приложения, но диалог по-прежнему загружает шрифты по умолчанию.

по умолчанию-шрифт-в-диалоге
я хочу использовать этот шрифт в диалоге



public void showDialogListView(View view) {


        dialog = new Dialog(personal_info_1.this);
        dialog.setContentView(R.layout.list_view);
        dialog.setTitle("Select Country");
        dialog.setCancelable(true);
        dialog.setCanceledOnTouchOutside(true);

        //prepare a list view in dialog
        listview_country = dialog.findViewById(R.id.dialogList);


        ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(), R.layout.list_item, R.id.txtitem, country_name);
        listview_country.setAdapter(adapter);
        listview_country.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                //Toast.makeText(personal_info_1.this, "Clicked Item: " + parent.getItemAtPosition(position).toString(), Toast.LENGTH_SHORT).show();
                textview_country_info.setText(parent.getItemAtPosition(position).toString());
                dialog.dismiss();
            }
        });


        dialog.show();
    }

здесь, country_name массив в адаптере массива извлекается из метода базы данных в onCreate.

list_item.xml:

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

android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
    android:id="@+id/txtitem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fontFamily="@font/quicksand_light"
    android:padding="10dp"
    android:text="Text"
    android:textSize="16sp" />

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:layout_marginLeft="15dp"
    android:layout_marginRight="15dp"
    android:background="@color/line_light"
/>

list_view.xml:

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

    <ListView
        android:id="@+id/dialogList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/listview_background"></ListView>

</LinearLayout>

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Вы можете создать класс CustomTextView, который расширяет TextView, и использовать этот класс CustomTextView в файле .xml вместо простого

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Typeface;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.widget.TextView;


@SuppressLint("AppCompatCustomView")
public class CustomTextView extends TextView {


    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

    }
    public CustomTextView(Context context) {
        super(context);
        if (!isInEditMode()) {
            Typeface face = Typeface.createFromAsset(context.getAssets(),
                    "fonts/OpenSansSemiBold.ttf");
            this.setTypeface(face);
        }
    }

    public CustomTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        if (!isInEditMode()) {
            Typeface face = Typeface.createFromAsset(context.getAssets(),
                    "fonts/OpenSansSemiBold.ttf");
            this.setTypeface(face);
        }
    }

    public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        if (!isInEditMode()) {
            Typeface face = Typeface.createFromAsset(context.getAssets(),
                    "fonts/OpenSansSemiBold.ttf");
            this.setTypeface(face);
        }
    }
}

В вашем .xml:

<app.com.packagename.CustomTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"            
android:text="text"/>
0 голосов
/ 10 января 2019

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

Вы просто удаляете элемент "android: fontfamily" в textview вашего файла "list_item.xml" и затем сделайте следующее.

1. Создайте папку шрифтов в res / font / then 2.Вы просто упоминаете в файле res / values ​​/ style.xml, как показано ниже (просто добавьте элемент семейства шрифтов к ресурсам)

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="android:fontFamily">@font/ubuntu_regular</item>
    <item name="fontFamily">@font/ubuntu_regular</item>
</style>

<style name="AppTheme.NoActionBar">
    <item name="android:fontFamily">@font/ubuntu_regular</item>
    <item name="fontFamily">@font/ubuntu_regular</item>
</style>

3.При запуске кода этот шрифт на основе style.xml автоматически применяется ко всему приложению. Вам не нужно добавлять семейство шрифтов в любом месте приложения.

...