我必须创建离线应用程序,并且要在联系人姓名旁边附加个人资料图像,并将的第一个字母作为个人资料图像放置,但是我不知道如何编码。 android - 在Kotlin中,如何在离线SMS应用程序中创建个人资料图像并将联系人姓名的首字母显示为个人资料图像?-LMLPHP

我已经搜索了,但是什么也没找到。

1。

class Inbox : AppCompatActivity(){

    private val requestReceiveSms: Int =1
    private val requestReadSms: Int = 2

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.readsms)

        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.SEND_SMS) !=
            PackageManager.PERMISSION_GRANTED
        ) {
            ActivityCompat.requestPermissions(
                this, arrayOf(android.Manifest.permission.SEND_SMS,android.Manifest.permission.READ_CONTACTS),
                requestReadSms
            )
        } else {
            refreshSmsInbox()
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>,
                                            grantResults: IntArray) {
        if(requestCode == requestReadSms) refreshSmsInbox()
    }

private fun refreshSmsInbox() {

        val smsList = ArrayList<SmsData>()

        val cursor = contentResolver.query(Uri.parse("content://sms/inbox"),null,null,null,null)

        if(cursor!!.moveToFirst()){

            val nameID = cursor.getColumnIndex("address")

            val messageID = cursor.getColumnIndex("body")

            val dateID = cursor.getColumnIndex("date")

            do{

                val dateString = cursor.getString(dateID)

                smsList.add(SmsData(cursor.getString(nameID),cursor.getString(messageID),Date(dateString.toLong()).toString()))
            }while (cursor.moveToNext())

        }

        cursor.close()

        val  adapter = ListAdapter(this, smsList)

        sms_list_view.adapter = adapter
    }


}

XML文件

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

        android:id="@+id/sms_list_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="6"
        tools:ignore="Suspicious0dp"></ListView>
</LinearLayout>

预期的

个人资料图片以及联系人姓名。

实际结果

只是联系人姓名。

最佳答案

您可以在ListView的项目布局中放置TextView。现在,我们将此TextView设置为圆形彩色背景。首先,我们为TextView定义背景drawable

profile_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <shape android:shape="oval">
            <solid android:color="@android:color/holo_blue_bright"/>
        </shape>
    </item>

</selector>

我们在ListView的项目布局中将此背景设置为TextView

listview_item_layout.xml
<TextView
    android:id="@+id/profile_text"
    android:layout_width="56dp"
    android:layout_height="56dp"
    android:background="@drawable/sample"
    />

现在,我们需要将nameId的第一个字母设置为此TextView
val firstLetter = nameId.subString( 0 , 1 ).toUpperCase()
profile_text.text = firstLetter

08-26 01:50