【问题标题】:Open activity depending on language开放活动取决于语言
【发布时间】:2014-06-27 09:14:33
【问题描述】:

我有一个支持不同语言的应用。但是,无论使用什么语言,我都有 1 个布局文件。
此布局有几个按钮可以打开不同的活动,但需要按字母顺序排列。
即 Car(eng) - Auto(de) 英文版按钮 3 将打开汽车活动,但德语版按钮 1 将打开汽车活动。如何确保发生这种情况,或者我必须根据语言创建不同的活动?
布局文件:

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="72dp"
        android:orientation="horizontal" >


    <Button 
        android:id="@+id/btnButton1"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="25dp"
        android:text="1" />

    <Button 
        android:id="@+id/btnButton2"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:layout_toRightOf="@+id/btnButton1"
        android:layout_alignBottom="@+id/btnButton1"
        android:layout_marginLeft="5dp"
        android:text="2"/>

    <Button 
        android:id="@+id/btnButton3"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:layout_toRightOf="@+id/btnButton2"
        android:layout_alignBottom="@+id/btnButton2"
        android:layout_marginLeft="5dp"
        android:text="3"/>
</RelativeLayout>

有按钮的类:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Locale.getDefault();
        setContentView(R.layout.activity_animal_choice);

        btnButton1 = (Button) findViewById(R.id.btnButton1);
        btnButton1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                    Intent intent = new Intent(Menu.this, Car.class);
                    startActivity(intent);

            }
        });

最好看看这是否可行,如果不可行,为每种语言创建不同的 apk 可能会更快、更容易

【问题讨论】:

    标签: android xml class android-layout android-intent


    【解决方案1】:

    您可以使用相同的 Activity 类,并为每种语言使用不同的布局或片段 XML。请参阅this page 上的“设计灵活布局”部分。正如它所说,确保所有这些布局文件保持更新将是您的额外工作。如果您计划支持多种语言,则可以考虑以编程方式添加按钮。然后你只需要更新每种语言的字符串。见this thread

    【讨论】:

    • 谢谢 - 但我已阅读,但在文档中看不到任何说明或指出我使用 1 个布局文件的方向,并且取决于语言将取决于哪个按钮执行什么操作,除非我从该链接中遗漏了什么?
    • 我建议你使用多个布局文件,例如,res/layout-de/main.xmlres/layout-en/main.xml 等。Activity 完全不知道按钮在屏幕上的位置,因此可以使用相同的 Activity与所有布局一起使用。将根据设备上的区域设置自动选择正确的布局。
    • 我实际上可能会以编程方式添加按钮,因为我的所有字符串都已完成
    【解决方案2】:

    您需要为所有按钮提供相同的 OnClickListener 并在该侦听器中检查按钮的文本是什么,例如:

    OnCLickListener listener = new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                    Intent intent = new Intent();
    
                    if (v.getText().equals(getString(R.string.car)) {
                        intent.setClass(Menu.this, Car.class);
                    }
                    else if (v.getText().equals(getString(R.string.whatever)) {
                        intent.setClass(Menu.this, Whatever.class);
                    }
                    // ...
    
                    startActivity(intent);
            }
        });
    
    button1.setOnClickListener(listener);
    button2.setOnClickListener(listener);
    button3.setOnClickListener(listener);
    

    【讨论】:

    • 谢谢 - 我使用的是 if 语句,但使用它来确定语言没有将它们全部设置为相同的侦听器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    相关资源
    最近更新 更多