1

アプリにいくつかのユーザー ロールがあります。それらのいくつかの画面は、いくつかの小さな変更を除いてほぼ同じはずです。すべてのユーザーに対して 1 つのレイアウトを作成し、実行時に (ユーザーのログ記録後) いくつかの UI 要素を変更する方法はありますか?それとも、ユーザー ロールごとに新しいレイアウトを作成する必要がありますか? 最善の方法は何ですか?

4

1 に答える 1

1

onCreate()変更が本当に軽微な場合は、すべてに同じレイアウトを使用し、ユーザーの役割に基づいて、呼び出しで不要なUI要素を非表示または削除します。次に例を示します。

public enum Roles { USER, ADMIN, SUPER };

private Roles myRole = Roles.USER;

@Override
protected void onCreate( Bundle data ) {
    super.onCreate( data );
    setContentView( R.layout.this_activity );
    myRole = getUserRole(); // This could inspect the Bundle or a singleton
    switch( myRole ) {
    case Roles.USER:
        findViewById( R.id.control1 ).setVisibility( View.GONE ); // This hides a control and the hidden control won't take up any space.
        findViewById( R.id.control2 ).setVisibility( View.INVISIBLE ); // This hides a control but leaves an empty space on the screen.
        findViewById( R.id.control3 ).setVisibility( View.VISIBILE );
        break;
    case Roles.ADMIN:
        findViewById( R.id.control4 ).setVisibility( View.GONE );
        findViewById( R.id.control5 ).setVisibility( View.INVISIBLE );
        findViewById( R.id.control6 ).setVisibility( View.VISIBILE );
        break;
    }
}

上記の手法でレイアウト全体を非表示にできることに注意してください。したがって、スーパー管理ボタンがいくつかある場合は、それらをLinearLayoutに配置し、レイアウトにIDを付けて、上記の手法でビット全体を非表示にします。

変更がもう少し重要な場合は、フラグメントを使用して関連するウィジェットを結び付けてから、ユーザーロールに適用されるレイアウトにフラグメントを追加することをお勧めします。

一般的に、内容がほぼ同じである複数のアクティビティを使用しないことをお勧めします。

于 2013-03-10T23:07:15.497 に答える