如何在没有图像的情况下在联系人上显示自定义图标?
How to show custom Icon on Contact with no Image?
我想在左侧显示联系人列表及其图像,我可以使用以下代码实现此目的,但我想知道如何在左侧显示自定义图标如果没有图像设置那个联系人?
我在可绘制对象中有我的自定义图标,命名为“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);
}
}
将您的自定义图像导入可绘制对象中。
如果联系人照片的 uri 不存在则上传自定义图像
您可以将自定义图像添加到可绘制对象中。一旦你有了它,就可以转到你的布局和 ImageView 中,你可以将它设置为你的图像的 src。该图像将一直显示,直到您设置另一张图像。
在这个例子ImageView我使用“@drawable/icondummy”作为加载或清空时的图像。
<ImageView
android:id="@+id/imageUserIconHome"
android:src="@drawable/icondummy"
android:layout_width="35dp"
android:layout_height="35dp" />
我想通了,
刚刚使用 android:background="@drawable/my_icon"
而不是 android:src="@drawable/my_icon"
,它显示了它的魔力
<ImageView
android:id="@+id/my_icon"
android:layout_width="35dip"
android:background="@drawable/chaticon"
android:clickable="true"
android:layout_height="35dip"
android:layout_gravity="center"
android:layout_margin="5dip" />
我想在左侧显示联系人列表及其图像,我可以使用以下代码实现此目的,但我想知道如何在左侧显示自定义图标如果没有图像设置那个联系人?
我在可绘制对象中有我的自定义图标,命名为“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);
}
}
将您的自定义图像导入可绘制对象中。 如果联系人照片的 uri 不存在则上传自定义图像
您可以将自定义图像添加到可绘制对象中。一旦你有了它,就可以转到你的布局和 ImageView 中,你可以将它设置为你的图像的 src。该图像将一直显示,直到您设置另一张图像。
在这个例子ImageView我使用“@drawable/icondummy”作为加载或清空时的图像。
<ImageView
android:id="@+id/imageUserIconHome"
android:src="@drawable/icondummy"
android:layout_width="35dp"
android:layout_height="35dp" />
我想通了,
刚刚使用 android:background="@drawable/my_icon"
而不是 android:src="@drawable/my_icon"
,它显示了它的魔力
<ImageView
android:id="@+id/my_icon"
android:layout_width="35dip"
android:background="@drawable/chaticon"
android:clickable="true"
android:layout_height="35dip"
android:layout_gravity="center"
android:layout_margin="5dip" />