2017-06-01 7 views
0

私はAndroidの初心者です。ここに私がやろうとしていることがあります。私は3つのボタンを持つアクティビティUIを持っています。 2番目のアクティビティは同じですが、ボタンのテキストとアクションは異なります。最初のアクティビティでボタンがクリックされたときにインテントやアクティビティを切り替えるのではなく、クリックしたときにボタンを変更するようにコーディングすることはできますか?このようにして、私は同じ第2のUIを必要としません。Androidでボタンのテキストと機能を変更するにはどうすればよいですか?

ログイン、サインアップ、ツアーの3つのボタンがあります。ログインやツアーがクリックされたら、私は実際に彼らが別の活動を開始したい。しかし、 "SignUp"の場合、これはUIが同一のボタンであるがテキストが異なり、異なるインテントを起動する場所です。私の目標は、この同じUIを排除し、「サインアップ」をクリックすると最初の画面でボタンを変更することだけです。

ここに、クリックするだけで新しいインテントを開始する私の現在のコードです。私が望む機能をどこから始めるべきかはわかりません。どんな助けもありがとうございます。ありがとう。

import android.support.v7.app.AppCompatActivity 
import android.os.Bundle 
import android.view.View 
import android.content.Intent 
import android.support.v4.content.ContextCompat.startActivity 

class MainActivity : AppCompatActivity() { 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.activity_main) 
    } 

    fun login(view: View) { 
     val myIntent = Intent([email protected], LoginActivity::class.java) 
     [email protected](myIntent) 
    } 

    fun signUpAs(view: View) { 
     val myIntent = Intent([email protected], SignUpAsActivity::class.java) 
     [email protected](myIntent) 
    } 

    fun tour(view: View) { 
     val myIntent = Intent([email protected], TourActivity::class.java) 
     [email protected](myIntent) 
    } 

    override fun onWindowFocusChanged(hasFocus: Boolean) { 
     super.onWindowFocusChanged(hasFocus) 
     if (hasFocus) { 
      val decorView = window.decorView 
      decorView.setSystemUiVisibility(
        View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) 
     } 
    } 

} 

答えて

0

私はあなたのコードをログイン用に保存し、別のアクティビティまたはフラグメント(今のように)にサインアップすることをお勧めします。 UIの重複を排除したい場合は、3つのボタンで別々のレイアウト(簡単なアプローチ)またはカスタムビュー(より高度なアプローチ)を作成することを検討してください。

ここは例です。

のres /レイアウト/ layout_buttons_menu.xml

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Button1" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Button2" /> 

    <Button 
     android:id="@+id/button3" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Button3" /> 
</LinearLayout> 

のres /レイアウト/ activity_login.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <EditText 
     android:id="@+id/name" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:ems="10" 
     android:inputType="textPersonName" 
     android:text="Name" /> 

    <EditText 
     android:id="@+id/password" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:ems="10" 
     android:inputType="textPassword" /> 

    <include layout="@layout/layout_buttons_menu" /> 
</LinearLayout> 

タグを使用すると、UIコンポーネントを再利用することができます含まれています。公式文書here

は、あなたのアクティビティでは、R.layout.activity_mainにSignUpAsActivityセットのレイアウトでは一般的な方法

@Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login) 
     val button1 = findViewById(R.id.button1) as Button 
} 
+0

ありがとう:あなたはfindviewbyidを取り除くために、合成のプロパティを使用することができます。しかし、なぜあなたは別々の活動を続けることを勧めますか?私の必要性が理解されているかどうかはわかりません。 2つの別々のボタンセットが必要です。最初のセットからの「サインアップ」がクリックされたときにだけ表示するために、2番目のボタンセットが必要です。第1セットと第2セットの他のすべてのボタンは別々のアクティビティを開始します。私は、起動するボタンのテキストとインテントだけが異なる、ほぼ同じアクティビティを排除することが理にかなっていると考えました。それは理にかなっていますか?なぜそうしてはいけないのか、どうして私は別々の活動に固執すべきなのかを説明してください。ありがとう。 –

+0

こんにちは@AnsonBolinger。画面上のボタンを「スワップ」するために、ボタン付きの2つのレイアウトを使用することができます。 VISIBLE/GONEの間でレイアウトの可視性を切り替えることで切り替えることができます。 私の最初のアイデアはSignUpとLogin UIを別々のFragments/Views/Activitirsに保存することです。それは重複のように見えるかもしれませんが(UIは非常に似ていると言われています)、将来的にはアプリケーションを拡大するのに役立ちます –

+0

大丈夫です。説明ありがとう。 –

0

にこれらのボタンにアクセスすることができます。

setContentView(R.layout.activity_main)

必要なボタンを取得し、動的にテキストや他の必要な属性を設定します。

Button mButton=(Button)findViewById(R.id.mybutton); 
mButton.setText("MyButton"); 

ヒント:https://kotlinlang.org/docs/tutorials/android-plugin.html

関連する問題