日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

使用JAVA代码实现Android布局(一)RelativeLayout

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用JAVA代码实现Android布局(一)RelativeLayout 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
通常我們使用XML來書寫Android的圖形界面,XML雖然編寫方便,但是在某些情況下不如JAVA代碼靈活,所以在某些環境下還是必須使用JAVA代碼來編寫界面。我們以下XML代碼為例,編寫相應的JAVA代碼。 [java] view plaincopy
  1. <RelativeLayout??
  2. ???????android:id="@+id/drawer_info"??
  3. ???????android:layout_width="match_parent"??
  4. ???????android:layout_height="120dp"?>??
  5. ??
  6. ???????<!--?個人資料布局?-->??
  7. ??
  8. ???????<ImageView??
  9. ???????????android:id="@+id/user_head"??
  10. ???????????android:layout_width="60dp"??
  11. ???????????android:layout_height="60dp"??
  12. ???????????android:layout_marginBottom="10dp"??
  13. ???????????android:layout_marginLeft="20dp"??
  14. ???????????android:layout_marginTop="25dp"??
  15. ???????????android:src="@drawable/user_demo"?>??
  16. ???????</ImageView>??
  17. ??
  18. ???????<TextView??
  19. ???????????android:id="@+id/user_name"??
  20. ???????????android:layout_width="wrap_content"??
  21. ???????????android:layout_height="wrap_content"??
  22. ???????????android:layout_alignTop="@id/user_head"??
  23. ???????????android:layout_marginLeft="20dp"??
  24. ???????????android:layout_marginTop="10dp"??
  25. ???????????android:layout_toRightOf="@id/user_head"??
  26. ???????????android:text="Mr?Zdy"??
  27. ???????????android:textSize="18sp"?>??
  28. ???????</TextView>??
  29. ??
  30. ???????<TextView??
  31. ???????????android:id="@+id/user_email"??
  32. ???????????android:layout_width="wrap_content"??
  33. ???????????android:layout_height="wrap_content"??
  34. ???????????android:layout_below="@id/user_name"??
  35. ???????????android:layout_marginLeft="20dp"??
  36. ???????????android:layout_marginTop="3dp"???
  37. ???????????android:layout_toRightOf="@id/user_head"??
  38. ???????????android:text="zhudongya123@gmail.com"??
  39. ???????????android:textSize="14sp"?>??
  40. ???????</TextView>??
  41. ???</RelativeLayout>??
上述XML代碼并不復雜。一個ImageView和兩個TextView。

最終效果圖是這個樣子的。相應的JAVA代碼如下。

我會在后面逐一解釋這些代碼。請忽略RelativeLayout背景和圓形的圖片,本例應該是普通的ImageView.



public class MainActivity extends AppCompatActivity {@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RelativeLayout rootlayout = new RelativeLayout(this);
        rootlayout.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, dip2px(120)));
        rootlayout.setId(0);

        ImageView imageView = new ImageView(this);
        RelativeLayout.LayoutParams image_Params = new RelativeLayout.LayoutParams(dip2px(60), dip2px(60));
        image_Params.setMargins(dip2px(20), dip2px(25), 0, dip2px(10));
        imageView.setLayoutParams(image_Params);
        imageView.setImageResource(R.mipmap.ic_launcher);
        imageView.setId(R.id.my_test1);

        TextView text_Name = new TextView(this);
        RelativeLayout.LayoutParams text_Name_Params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        text_Name_Params.addRule(RelativeLayout.RIGHT_OF, imageView.getId());
        text_Name_Params.addRule(RelativeLayout.ALIGN_TOP, imageView.getId());
        text_Name_Params.setMargins(dip2px(20), dip2px(10), 0, 0);
        text_Name.setLayoutParams(text_Name_Params);
        text_Name.setText("Mr.Zdy");
        text_Name.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
        text_Name.setId(R.id.my_test2);

        TextView text_Email = new TextView(this);
        RelativeLayout.LayoutParams text_Email_Params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        text_Email_Params.addRule(RelativeLayout.RIGHT_OF, imageView.getId());
        text_Email_Params.addRule(RelativeLayout.BELOW, text_Name.getId());
        text_Email_Params.setMargins(dip2px(20), dip2px(3), 0, 0);
        text_Email.setLayoutParams(text_Email_Params);
        text_Email.setText("zhudongya123@gmail.com");
        text_Email.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);

        rootlayout.addView(imageView, image_Params);
        rootlayout.addView(text_Name, text_Name_Params);
        rootlayout.addView(text_Email, text_Email_Params);
        setContentView(rootlayout);




    }public int dip2px(float dpValue) {final float scale = this.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }}
在studio中直接設置id 會報錯,所以改用下面方法處理




首先我們定義了一個RelativeLayout,起名為rootlayout。?
這個是這個界面的根布局。?
然后我們使用了setLayoutParams方法定義了該布局的長度和寬度。?
在XML代碼中,我們是直接寫出View的width,height,margin。?
而在Java代碼中,我們必須使用LayoutParams類來指定其屬性。
[java] view plaincopy
  1. rootlayout.setLayoutParams(new?RelativeLayout.LayoutParams(??
  2. ????????????????LayoutParams.MATCH_PARENT,?dip2px(120)));??


RelativeLayout.LayoutParams繼承自ViewGroup.LayoutParams。?
同時LinearLayout.LayoutParams也是繼承自ViewGroup.LayoutParams。
這些LayoutParams類用來在Java代碼中指定View的各種屬性。例如width,height,margin等等。?
通常沒有特殊屬性時,我們可以直接使用LayoutParams。?
例如:rootlayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));?
然后我們設置了rootlayout的ID.rootlayout.setId(0);?
接下來我們定義了一個ImageView。 [java] view plaincopy
  1. ImageView?imageView?=?new?ImageView(this);??
  2. RelativeLayout.LayoutParams?image_Params?=?new?RelativeLayout.LayoutParams(??
  3. ????????dip2px(60),?dip2px(60));??
  4. image_Params.setMargins(dip2px(20),?dip2px(25),?0,?dip2px(10));??
  5. imageView.setLayoutParams(image_Params);??
  6. imageView.setImageResource(R.drawable.user_demo);??
  7. imageView.setId(1);??

在指定ImageView的寬度和高度時,我使用了一個方法dip2px,這個方法是將dp值轉化為px值,因為在XML中,我直接使用了120dp,60dp這樣的單位,但是在JAVA代碼中,默認單位是px(像素),所以我們必須定義了這樣一個方法來轉換單位。
[java] view plaincopy
  1. public?int?dip2px(float?dpValue)?{??
  2. final?float?scale?=?this.getResources().getDisplayMetrics().density;??
  3. return?(int)?(dpValue?*?scale?+?0.5f);??
  4. }??


同時我們使用了setMargins方法來指定margin屬性,使用了setImageResource方法來指定了相應的圖片資源。
使用setLayoutParams方法將定義好的屬性施加到ImageView上。?
接下來是一個TextView。

[java] view plaincopy
  1. TextView?text_Name?=?new?TextView(this);??
  2. RelativeLayout.LayoutParams?text_Name_Params?=?new?RelativeLayout.LayoutParams(??
  3. ????????RelativeLayout.LayoutParams.WRAP_CONTENT,??
  4. ????????RelativeLayout.LayoutParams.WRAP_CONTENT);??
  5. text_Name_Params.addRule(RelativeLayout.RIGHT_OF,?imageView.getId());??
  6. text_Name_Params.addRule(RelativeLayout.ALIGN_TOP,?imageView.getId());??
  7. text_Name_Params.setMargins(dip2px(20),?dip2px(10),?0,?0);??

在定義RelativeLayout.LayoutParams變量text_Name_Params時,我使用了addRule這個方法。?
addRule這里執行了兩次都是兩個參數,第一個代表屬性,第二個表示該與該屬性關聯的View的Id。?
這里我們要注意,我們也可以這樣寫?
text_Name_Params.addRule(RelativeLayout.RIGHT_OF, 1);
因為我們將ImageView的Id指定為1,但是當你使用imageView.getId()這樣的寫法時,你也必須在前面使用setId方法來指定其Id。?
在某些情況下,addRule可能只有一個參數。
例如:addRule(RelativeLayout.CENTER_VERTICAL),有些時候第二個參數可能代表布爾值,例如addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);


[html] view plaincopy
  1. text_Name.setLayoutParams(text_Name_Params);??
  2. text_Name.setText("Mr.Zdy");??
  3. text_Name.setTextSize(TypedValue.COMPLEX_UNIT_SP,?18);??
  4. text_Name.setId(2);??

使用setTextSize方法時,我們的第一個參數將單位強制指定為Sp,默認是Px。


最后我們使用addview方法將三個View加入rootLayout中。并使用setContentView加載視圖。


[java] view plaincopy
  1. rootlayout.addView(imageView,?image_Params);??
  2. ?????rootlayout.addView(text_Name,?text_Name_Params);??
  3. ?????rootlayout.addView(text_Email,?text_Email_Params);??
  4. ?????setContentView(rootlayout);??

addView也可以只有一個參數,將第二個Params參數省略,因為前面所有的View我都已經使用setLayoutParams指定其屬性,所以在這里addView方法也可不寫第二個參數。


個人觀點,僅供參考。
參考資料:
[addRule方法的使用](http://zhidao.baidu.com/link?url=R6E6Hwoea_SQFi5U_OwqZq0lqihpRkWYpOw9nZReYRc-1M4eUMzvyHjPn5FL0323gfSPssBLZLTgeKPeMrQ7W875uBxsUJbOaavpPmFCwMW)
[Android 步步為營 第5營 代碼控制UI,View](http://www.cnblogs.com/vivid-stanley/archive/2012/08/22/2651399.html)
[android-getTextSize返回值是以像素(px)為單位的,setTextSize()以sp為單位](http://blog.csdn.net/lizhenmingdirk/article/details/7349386)
[Android中LayoutParams的用法](http://www.cnblogs.com/zhengbeibei/archive/2013/03/29/2989263.html)

總結

以上是生活随笔為你收集整理的使用JAVA代码实现Android布局(一)RelativeLayout的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。