Java 带文本的圆形QuickContactBadge

Java 带文本的圆形QuickContactBadge,java,android,quickcontactbadge,Java,Android,Quickcontactbadge,我有一个带有QuickContactBadge和联系人姓名的listview。问题是徽章是正方形的,如果联系人没有图像,那么它就是空白的。我想要一张圆形的照片,或者只是像android棒棒糖一样的联系人的首字母: 我试图解决这个问题,但没能奏效。也许我只是执行错了?这就是我所拥有的: ContactsTab.java: public class ContactsTab extends ListFragment implements LoaderCallbacks<Cursor> {

我有一个带有
QuickContactBadge
和联系人姓名的
listview
。问题是徽章是正方形的,如果联系人没有图像,那么它就是空白的。我想要一张圆形的照片,或者只是像android棒棒糖一样的联系人的首字母:

我试图解决这个问题,但没能奏效。也许我只是执行错了?这就是我所拥有的:

ContactsTab.java:

public class ContactsTab extends ListFragment implements LoaderCallbacks<Cursor> {

    private CustomAdapter mAdapter;
    private Cursor mCursor;
    private String currentQuery;
    private int mIdColumn;
    private int mLookupKeyColumn;
    private Uri mContactUri;
    private QuickContactBadge mBadge;
    private static final String[] PROJECTION = {
            Contacts._ID,
            Contacts.DISPLAY_NAME_PRIMARY,
            Contacts.LOOKUP_KEY,
            Contacts.PHOTO_THUMBNAIL_URI,
            Contacts.HAS_PHONE_NUMBER,
    };
    private static final String[] FROM = { Contacts.PHOTO_THUMBNAIL_URI, Contacts.DISPLAY_NAME_PRIMARY };
    private static final int[] TO = { R.id.badge, R.id.contact_text };
    private static final String SELECTION = "(" + Contacts.IN_VISIBLE_GROUP + " = 1) AND (" + Contacts.HAS_PHONE_NUMBER + " != 0 )";


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mAdapter = new CustomAdapter(getActivity(), R.layout.contacts_list_item, null, FROM, TO, 0)
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setHasOptionsMenu(true);
        setListAdapter(mAdapter);
        getLoaderManager().initLoader(0, null, this);
        getListView().setDivider(null);
        getListView().setDividerHeight(0);
    }


    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        Uri contentUri = Contacts.CONTENT_URI;

        return new CursorLoader(getActivity(),
                contentUri,
                PROJECTION,
                SELECTION,
                null,
                Contacts.DISPLAY_NAME_PRIMARY + " ASC");
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        mAdapter.swapCursor(data);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
        mAdapter.swapCursor(null);
    }
}

创建一个自定义的可绘制图形,您就可以这样做

文件:drawable/contact_badge_round.xml

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

    <size android:width="32dp" android:height="32dp"/>

    <gradient android:centerColor="#123456"
              android:startColor="#123456"
              android:endColor="#123456"
        />

</shape>

然后在布局中创建一个按钮,并将背景设置为contact_badge_round

 <Button
        android:id="@+id/roundContact"
        android:layout_width="32dp"
        android:layout_height="32dp"
        android:text="A"
        android:gravity="center"
        android:background="@drawable/background_new_entity_symbol"
       />


干杯

一个
QuickContactBadge
是由
在xml中声明的,但我仍然尝试将
android:background
设置为我的drawable,它将backgound设置为没有缩略图的联系人,但它不会裁剪联系人的大小。还有,我该如何设置文本?我尝试了同样的方法,但没有找到解决方案。所以我尝试了这种对所有平台都是同质的定制方式。
 <Button
        android:id="@+id/roundContact"
        android:layout_width="32dp"
        android:layout_height="32dp"
        android:text="A"
        android:gravity="center"
        android:background="@drawable/background_new_entity_symbol"
       />