如何使用名称 android 中的首字母两个字符制作缩略图?

how to make thumbnail image with initials two char from name android?

我想像 "Peter Parker" 这样在我的图像视图中用两个词缩略首字母,但我只能得到一个词 "P" 而 运行 编码如何在 [ 之后得到第二个词=16=]我的代码是。

  holder.imgName?.text=teamData[position].userImage.substring(0,1)

您好,您可以使用以下方式

String str = "FirstWord SecondWOrd";
        String[] strArray = str.split(" ");
        StringBuilder builder = new StringBuilder();
        if (strArray.length > 0)
            builder.append(strArray[0], 0, 1);
        if (strArray.length > 1)
            builder.append(strArray[1], 0, 1);
        Log.d("New Text" , builder.toString());

看起来你使用子字符串只抓取从位置 0 到位置 1 的字母,这是 Petter 中的 P

holder.imgName?.text=teamData[position].userImage  

.substring(0,1)

如果您想抓住 Petter Parker 这个词,您有几个选择。
• IndexOf & Substring - 查找字符串的位置并获取其后的子文本。
• Substring - 基于参数的字符串的子文本

如果您打算在任何阶段更改文本长度,则需要找到单词的开头 (int start = yourString.indexOf("Petter"));
和词尾 ( int end = yourString.indexOf(" "))

IndexOf 将 return 您查询中第一个字母的位置 - 您的情况是 Petter 中的 P --- 所以 start+"petter".length()

这是我正在开发的条形码价格检查器应用程序示例

                    // STRING  FORMAT 00000899999:0.99   

                    String currentLine = "00000899999:0.99";
                    int breakPoint = currentLine.indexOf(":");
                    int end = currentLine.length();
                    int start = breakPoint + 1;
                    String Price = currentLine.substring(start,end);

价格将在带 +1 的 (:) 之后或不带 +1 的包含 (:) 之后开始,并在行长度处结束。

您可以通过功能方式实现:

val peterParker = "Peter Parker"

val initials = peterParker
        .split(' ')
        .mapNotNull { it.firstOrNull()?.toString() }                     
        .reduce { acc, s -> acc + s }

println(initials) //PP

这将涵盖一个人的名字由超过 2 个单词组成的情况。

我做了一些技巧并用按钮实现了这个头像 哈哈 ;p

创建profile_bg.xml

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

    <solid
        android:color="@color/colorWhite"/>

    <corners
        android:radius="500dp"/>
</shape>

然后main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#4300313A"
    tools:context=".MainActivity">

    <Button
        android:onClick="clicked"
        android:id="@+id/avatar"
        android:clickable="false"
        android:focusable="false"
        android:textColor="@color/colorPrimary"
        android:textSize="65sp"
        android:focusableInTouchMode="false"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:background="@drawable/profile_bg"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"/>

    <EditText
        android:id="@+id/edtname"
        android:layout_below="@+id/avatar"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:hint="Enter your name"/>

    <Button
        android:onClick="clicked"
        android:textColor="@color/colorBackground"
        android:text="Submit Name"
        android:textStyle="bold"
        android:focusableInTouchMode="false"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/edtname"
        android:layout_marginTop="50dp"/>

</RelativeLayout>

然后在MainActivity.java(拆分字符串并获取每个单词的第一个字母~在if条件下用stringbuilder命名)

    public class MainActivity extends AppCompatActivity {

        EditText editText;
        Button button;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            editText = (EditText) findViewById(R.id.edtname);
            button = (Button) findViewById(R.id.avatar);

        }

        public void clicked(View view) {

            String str = editText.getText().toString();

            String[] strArray = str.split(" ");
            StringBuilder builder = new StringBuilder();

//First name
            if (strArray.length > 0){
                builder.append(strArray[0], 0, 1);
            }
//Middle name
            if (strArray.length > 1){
                builder.append(strArray[1], 0, 1);
            }
//Surname
            if (strArray.length > 2){
                builder.append(strArray[2], 0, 1);
            }

            button.setText(builder.toString());
        }
    }

我用 Kotlin 编写了一个扩展函数来获取姓名的首字母。您可以使用自定义视图并使用您想要的头像视图绘制文本和剪辑形状。

val initials = "Vikas Patidar".asInitials()

fun String.asInitials(limit: Int = 2): String {
    val buffer = StringBuffer()
    trim().split(" ").filter {
        it.isNotEmpty()
    }.joinTo(
        buffer = buffer,
        limit = limit,
        separator = "",
        truncated = "",
    ) { s ->
        s.first().uppercase()
    }
    return buffer.toString()
}