как сделать миниатюру изображения с инициалами двумя символами от имени андроид? - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу сделать миниатюру инициалов с двумя словами для моего изображения, такими как «Питер Паркер», но я могу получить только одно слово «P» во время выполнения кода, как получить второе слово после пробела, мой код равен.

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

Ответы [ 4 ]

0 голосов
/ 12 июня 2019

Я сделал небольшой трюк и реализовал этот аватар с помощью кнопки lol; p

create 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 (чтобы разбить строку и получить первую букву каждого слова ~ name в условии 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());
        }
    }
0 голосов
/ 21 ноября 2018

похоже, что вы используете подстроку только для захвата букв из позиции 0 в позицию 1, это P в Petter

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

.substring (0,1)

Если вы хотите перехватить слова Petter Parker, у вас есть несколько вариантов.
• IndexOf & Substring - найдите позицию строки и получите подтекст после.
• Substring - подтекстстрока на основе параметров

Если вы планируете изменить длину текста на любом этапе, вам нужно найти начало слова (int start = yourString.indexOf("Petter"));
и конец слова (int end = yourString.indexOf(" "))

IndexOf вернет позицию первой буквы в вашем запросе - ваш случай - это P в Petter --- Так что 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 и заканчиваться на длине строк.

0 голосов
/ 21 ноября 2018

Вы можете сделать это функциональным способом:

val peterParker = "Peter Parker"

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

println(initials) //PP

Это будет охватывать случаи, когда имя человека состоит из более чем 2 слов.

0 голосов
/ 21 ноября 2018

Привет, вы можете использовать следующий способ

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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...