Почему в моем представлении редактирования текста Android Studio не отображаются ввод, вывод или подсказка?

#java #android #android-edittext

#java #Android #android-edittext

Вопрос:

Мой EditText работает не так, как видео и статьи, которые я нашел. EditText не показывает, что пользователь ввел во время ввода, или когда я указываю вывод, чтобы он отображался там, подсказка, которую я ему назначил, также не отображается. Прямо сейчас у меня есть вывод в TextView, но он может значительно сократить количество строк кода, если я смогу заставить EditText работать должным образом. Я новичок в этом, и у меня проблемы с пониманием. Спасибо за помощь.

Вот файл xml:

 //DOES NOT SHOW INPUT AT TIME OF INPUT, OR WHEN TOLD TOLD BY OUTPUT. HINT DOES NOT SHOW EITHER-------
<EditText
android:id="@ id/MetalCounter"
android:layout_width="40dp"
android:layout_height="20dp"
android:layout_margin="4dp"
android:ems="10"
android:textAlignment="center"
android:textColor="#000000"
android:textSize="15sp"
android:hint="0"
android:textColorHint="#000000"
android:inputType="number"
app:layout_constraintRight_toLeftOf="@id/guideline"
app:layout_constraintTop_toBottomOf="@id/ResourceSubmitButton" />

 //is put in top left corner for testing purposes---------------------------------
<TextView
android:id="@ id/MetalResult"
android:layout_width="40dp"
android:layout_height="20dp"
android:layout_margin="4dp"
android:text=""
android:textAlignment="center"
android:textColor="#000000"
android:textSize="15sp"
 />
  

и вот файл java:

 package com.example.game;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

// These are the global variables
EditText MetalCounter;
TextView MetalResu<
Button ResourceSubmitButton;
int Metal;

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

    //to get from user input and into variable form
    MetalCounter = (EditText) findViewById(R.id.MetalCounter);
    MetalResult = (TextView) findViewById(R.id.MetalResult);
    ResourceSubmitButton = (Button) findViewById(R.id.ResourceSubmitButton);

    //Submit button
    ResourceSubmitButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //to receive and show the inputted values into the MetalResult TextView
            MetalResult.setText(MetalCounter.getText().toString());
   

            //This is a test to see if the result would show up but does not
            Metal = Integer.parseInt(MetalCounter.getText().toString());
            MetalCounter.setText(MetalCounter.getText().toString());
        }
    });
}
}
  

Ответ №1:

Ну, я думаю, что проблема заключается здесь, в этой части

 android:layout_width="40dp"
android:layout_height="20dp"
android:layout_margin="4dp"
android:ems="10"
android:textSize="15sp"
  

Эти атрибуты не определены четко, потому что вы установили значение layout_margin 4dp, что приводит к уменьшению представления. таким образом, вместо ширины 40dp теперь у вас ширина 32dps, аналогично у вас есть высота всего 12dps, что очень мало и не соответствует выбранному textSize

Итак, мое предложение заключается в изменении атрибутов width и height на wrap_content следующим образом

 android:layout_width="wrap_content"
android:layout_height="wrap_content"
  

и вы можете оставить все остальное как есть.

Примечания

  • Рассмотрите возможность изменения ваших переменных в соответствии с camelCase соглашением
 // Before
EditText MetalCounter;
TextView MetalResu<

//After
EditText metalCounter;
TextView metalResu<
  
  • Измените непрозрачность цвета подсказки, чтобы отличить его от самого текста
  • Если у вас все еще есть проблема, это может быть связано с ограничениями внизу. Если да, пожалуйста, опубликуйте полный файл макета.

Комментарии:

1. Большое вам спасибо. Я не понимал, что поле зависит от ширины, а высота должна быть больше, чем размер текста. Спасибо, что научили меня. Теперь он работает нормально, однако я не могу использовать wrap_content для ширины, потому что это делает поле действительно большим. Также что означает атрибут » android: ems =»10″ » и как мне ограничить представление EditText до 3 цифр? Спасибо.

2. Когда вы устанавливаете ems для свойства значение 10, это означает, что EditText ширина будет соответствовать только 10 символам, даже если количество символов превысило 10. Однако, если вам нужно указать максимальное количество символов, которое разрешено вводить пользователю, вы можете использовать android:maxLength="10"