如何在没有图像的联系人上显示自定义图标?

Posted

技术标签:

【中文标题】如何在没有图像的联系人上显示自定义图标?【英文标题】:How to show custom Icon on Contact with no Image? 【发布时间】:2021-04-27 06:46:12 【问题描述】:

我想在左侧显示联系人列表及其图像,我可以使用以下代码实现此目的,但我想知道如何在左侧显示自定义图标如果没有为该联系人设置图像?

我在drawables中有我的自定义图标,命名为“my_icon”。

我显示联系人列表的片段;

    public class FragmentContacts extends Fragment
    implements LoaderManager.LoaderCallbacks<Cursor>
    ImageView imageView;
    private ListView lv_ContactList;
    private SimpleCursorAdapter mCursorAdapter;
    private static final String DISPLAY_NAME = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB                         
    ? ContactsContract.Contacts.DISPLAY_NAME_PRIMARY : ContactsContract.Contacts.DISPLAY_NAME;

    private static final String[] contactsColumns =     ContactsContract.Contacts._ID,         
    ContactsContract.Contacts.LOOKUP_KEY, DISPLAY_NAME, ContactsContract.Contacts.PHOTO_URI    ;
    private final String contactsFilter = "(" +ContactsContract.Contacts.HAS_PHONE_NUMBER+ "='1') AND 
    (" + ContactsContract.Contacts.IN_VISIBLE_GROUP + "='1')";
    private final String contactsSortOrder = DISPLAY_NAME + " COLLATE LOCALIZED ASC";

    private final static String[] listDisplayColumns =  DISPLAY_NAME, 
    ContactsContract.Contacts.PHOTO_URI   ;
    private final static int[] listDataViewIDs =  R.id.contact_name, R.id.imgContact ;

    String[] mSelectionArgs;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    
    View view = inflater.inflate(R.layout.frag_contacts, null);
    lv_ContactList = (ListView)view.findViewById(R.id.lv_ContactList);
    return view;
    

    @Override
    public void onResume()
    super.onResume();

    mCursorAdapter= new SimpleCursorAdapter( getActivity(), R.layout.list_row_contact, null,         
    listDisplayColumns, listDataViewIDs, 0);
    lv_ContactList.setAdapter(mCursorAdapter);
    getLoaderManager().initLoader(0, null, this);
    

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args ) 
    if(mSelectionArgs == null)
        return new CursorLoader( getActivity(), ContactsContract.Contacts.CONTENT_URI,         
     contactsColumns, contactsFilter, null, contactsSortOrder );
    else
        return new CursorLoader( getActivity(), ContactsContract.Contacts.CONTENT_URI,         
     contactsColumns, contactsFilter + " AND (" + DISPLAY_NAME+" LIKE ?)", mSelectionArgs, 
      contactsSortOrder );
       
    @Override
    public void onLoadFinished( Loader<Cursor> loader, Cursor data ) 
    mCursorAdapter.swapCursor(data);
    
    @Override
    public void onLoaderReset( Loader<Cursor> loader ) 
    mCursorAdapter.swapCursor(null);
    
    

【问题讨论】:

【参考方案1】:

将您的自定义图像导入可绘制对象。 如果联系人照片的 uri 不存在,则上传自定义图片

【讨论】:

【参考方案2】:

您可以将自定义图像添加到可绘制对象中。一旦你有了它,进入你的布局并在 ImageView 中,你可以将它设置为你的图像的 src。该图像将一直显示,直到您设置另一个图像。

在此示例 ImageView 中,我在加载或为空时使用“@drawable/icondummy”作为图像。

<ImageView
    android:id="@+id/imageUserIconHome"
    android:src="@drawable/icondummy"
    android:layout_
    android:layout_ />

【讨论】:

请将代码添加为文本,而不是图像,这样人们更容易验证您的答案。 @UtaibaNaqshbandi 你收到错误了吗?还是只是空虚?【参考方案3】:

我想通了, 刚刚使用android:background="@drawable/my_icon" 而不是android:src="@drawable/my_icon",它显示了它的魔力

<ImageView
android:id="@+id/my_icon"
android:layout_
android:background="@drawable/chaticon"
android:clickable="true"
android:layout_
android:layout_gravity="center"
android:layout_margin="5dip" />

【讨论】:

以上是关于如何在没有图像的联系人上显示自定义图标?的主要内容,如果未能解决你的问题,请参考以下文章

在推送/本地通知右侧显示自定义图像?

如何让自定义标签栏显示标签栏项目在 Xcode 中设置的选定图像?

如何在没有地图视图的情况下在自定义图像上显示用户位置

在 Android 中的联系人详细信息上显示应用程序图标

android开发 百度地图3.0以上版本,如何显示自定义标记图标?

如何使用自定义布局显示 Firebase 通知?