Как я могу установить ContentView в RelativeLayout?(индикатор) - PullRequest
0 голосов
/ 30 марта 2012

Может кто-нибудь, пожалуйста, объясните мне, как я могу установить setContentView в относительной компоновке?я добавил активность, но получаю ошибки, нулевые точки ...

я пробовал это:

         public ProgressbarActivity(Context context) {
    super(context);

    Activity a = new Activity();
    RelativeLayout rl = new RelativeLayout(getContext());
    LinearLayout k = new LinearLayout(getContext());
    k.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    LinearLayout z = new LinearLayout(getContext());
    z.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

    RoundRectShape s = new RoundRectShape(f, null, null);
    ShapeDrawable shapedrawable =  new ShapeDrawable(s);
    shapedrawable.setShape(s);
    shapedrawable.getPaint().setColor(0xffffffff);


    RoundRectShape s1 = new RoundRectShape(f, null, null);
    ShapeDrawable sd =  new ShapeDrawable(s1);
    sd.setShape(s1);
    sd.getPaint().setColor(0xff0080ff);
    rl.setLayoutParams(new LayoutParams(200, 25));

    LayoutParams lp = new LayoutParams(200, 20);
    rl.setPadding(0, 100, 0, 0);
    rl.setGravity(Gravity.CENTER_HORIZONTAL);


    ImageView iv = new ImageView(getContext());
    iv.setBackgroundDrawable(shapedrawable);
    iv.setLayoutParams(lp);


    GradientDrawable g = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colours);


    ImageView iv3 = new ImageView(getContext());
    iv3.setBackgroundDrawable(g);
    iv3.setLayoutParams(lp);

    ClipDrawable cd = new ClipDrawable(sd, Gravity.LEFT, ClipDrawable.HORIZONTAL);
    ImageView iv2 = new ImageView(getContext());
    iv2.setBackgroundDrawable(cd);
    iv2.setLayoutParams(lp);
    cd.setLevel(5000);


    rl.addView(iv);
    rl.addView(iv2);
    rl.addView(iv3);
    a.setContentView(rl);

    onCreate();

}

что я сделал не так?Может кто-нибудь объяснить, пожалуйста?

Я получаю исключение nullPointerException ...

это мой logCat:

03-30 06:58:27.369: E/AndroidRuntime(1534): FATAL EXCEPTION: main
03-30 06:58:27.369: E/AndroidRuntime(1534): java.lang.RuntimeException: Unable to start activity ComponentInfo{eng.pim.app/eng.pim.app.PimActivity}: java.lang.NullPointerException
03-30 06:58:27.369: E/AndroidRuntime(1534):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at android.os.Looper.loop(Looper.java:137)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at android.app.ActivityThread.main(ActivityThread.java:4424)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at java.lang.reflect.Method.invokeNative(Native Method)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at java.lang.reflect.Method.invoke(Method.java:511)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at dalvik.system.NativeStart.main(Native Method)
03-30 06:58:27.369: E/AndroidRuntime(1534): Caused by: java.lang.NullPointerException
03-30 06:58:27.369: E/AndroidRuntime(1534):     at android.app.Activity.setContentView(Activity.java:1855)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at eng.pim.app.ProgressbarActivity.<init>(ProgressbarActivity.java:77)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at eng.pim.app.PimActivity.onCreate(PimActivity.java:24)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at android.app.Activity.performCreate(Activity.java:4465)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
03-30 06:58:27.369: E/AndroidRuntime(1534):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
03-30 06:58:27.369: E/AndroidRuntime(1534):     ... 11 more

1 Ответ

1 голос
/ 30 марта 2012

С вашим кодом много проблем:

1) Если ProgressbarActivity является Activity, вы не используете конструктор для инициализации, вы должны использовать метод onCreate() для инициализации представлений, построения данных , настройка потоков и т. д.

2) Вы никогда этого не сделаете:

Activity a = new Activity();

Если вы хотите начать новое действие с созданным макетом, вы должны использовать Intent, чтобы начать новое действие:

Intent i = new Intent(CurrentActivityName.this, OtherActivityName.class);
startActivity(i);

Приведенный выше код будет работать в действии, в противном случае вместо CurrentActivityName.this вам придется получить ссылку на некоторый Context (вы можете использовать контекст приложения с методом getApplicationContext()), а также вы должны вызвать startActivity() на этой Context ссылке. Если вы хотите, чтобы новое действие имело созданный вами макет, переместите этот код в новый метод действия onCreate(), используйте setContentView() там с Relativelayout, который вы создали, и используйте приведенный выше код с Intent для начать эту деятельность. (Примечание: вы должны объявить новое действие в манифесте)

3) RelativeLayout складывает представления (один поверх других), если это не то, что вам нужно, используйте правила, чтобы правильно расположить представления в этом макете

Может быть, вы должны увидеть несколько уроков о том, как это сделать:

- для Activity создания и запуска: http://developer.android.com/guide/topics/fundamentals/activities.html

-для RelativeLayout использование: http://developer.android.com/resources/tutorials/views/hello-relativelayout.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...