简体   繁体   English

文本视图的可访问性

[英]accessibility on textview

I am new in android development.我是 android 开发的新手。 I start for android accessibility work to make android application accessible for blind people.我开始进行 android 辅助功能工作,以使盲人可以访问 android 应用程序。 I made simple login form and set accessibility attribute such as content description and focus etc I turn on talk back and check it.我制作了简单的登录表单并设置了可访问性属性,例如内容描述和焦点等我打开回复并检查它。

    here is code activity_main.xml
    <?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:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="@string/usernm_text"
        android:id="@+id/username"
        android:contentDescription="@string/usernm_text"
        android:focusable="true"
        android:nextFocusDown="@+id/usr_nm"
         />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:id="@+id/usr_nm"
        android:contentDescription="@string/usernm_text"
        android:focusable="true"
        android:text="admin"
        android:nextFocusDown="@+id/password"
        android:nextFocusUp="@id/usr_nm"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="@string/pass_text"
        android:id="@+id/password"
        android:focusable="true"
        android:nextFocusDown="@+id/pass_edit"
        android:contentDescription="@string/pass_text"
        android:nextFocusUp="@id/usr_nm"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:ems="10"
        android:id="@+id/pass_edit"
        android:contentDescription="@string/pass_text"
        android:text="admin"
        android:focusable="true"
        android:nextFocusDown="@+id/login"
        android:nextFocusUp="@id/password"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/login_btn"
        android:onClick="log"
        android:id="@+id/login"
        android:contentDescription="@string/login_btn"
        android:focusable="true"
        android:nextFocusUp="@id/pass_edit"
        android:accessibilityLiveRegion="polite" />


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:id="@+id/log_succ"
        android:focusable="true"
        android:accessibilityLiveRegion="polite" />

</LinearLayout>

in my MainActivity.java在我的 MainActivity.java

public class MainActivity extends AppCompatActivity {
    EditText usr_nm;
    TextView log_succ;
    Button logs;
    EditText pass_edit;
    int  counter=5;
    String log_msg="login successful";
    Button log_btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        log_succ=(TextView) findViewById(R.id.log_succ);
        usr_nm=(EditText) findViewById(R.id.usr_nm);
        pass_edit=(EditText)findViewById(R.id.pass_edit);



    }
    public  void  log(View view) {

        if (usr_nm.getText().toString().equals("admin") &&
                pass_edit.getText().toString().equals("admin")) {
            log_succ.setText(log_msg);
            log_succ.setContentDescription("Login successful");
//            log_succ.isFocusable();

//            Toast.makeText(MainActivity.this, "password is correct", Toast.LENGTH_LONG).show();
//            Intent in = new Intent("com.example.samir.login_form.user_page");
//            startActivity(in);


        } else {
            Toast.makeText(MainActivity.this, "password is incorrect", Toast.LENGTH_SHORT).show();
            counter--;
            if (counter == 0)
                logs.setEnabled(false);

        }
    }

login successful textview prompt by talkback when touch it.触摸它时通过对讲登录成功的textview提示。 i want that when i click on login button then textview "Login successful" should be prompt by talkback immediately.我希望当我点击登录按钮时,应该立即通过对讲提示 textview“登录成功”。 I set AccessibilityliveRegion to "polite".我将 AccessibilityliveRegion 设置为“礼貌”。 what else should i do??我还应该做什么??

From what i understood, you want the system to speak up "Login Successful" after the user logs in.据我了解,您希望系统在用户登录后说出“登录成功”。

You can achieve this using TextToSpeech class.您可以使用TextToSpeech类来实现这一点。

First declare an object of TextToSpeech (a Global/Class variable):首先声明一个TextToSpeech对象(一个全局/类变量):

TextToSpeech tts;

Then set it to instantiate & speak up when your login process is successful:然后将其设置为在登录过程成功时实例化并发言:

tts = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
      @Override
      public void onInit(int status) {
          if(status == TextToSpeech.SUCCESS){
              tts.setLanguage(Locale.US);
              tts.speak("Login Successful", TextToSpeech.QUEUE_FLUSH, null);
          }
      }
  });

Also, don't forget to release the resources after you are done:另外,不要忘记在完成后释放资源:

@Override
protected void onPause() {
        if(tts!=null){
            tts.stop();
            tts.shutdown();
        }
        super.onPause();
}

Hope this helps.希望这可以帮助。

如果我们为 textview 设置 android:accessibilityLiveRegion="polite" ,这是可能的..谢谢您的回复。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM