GVKun编程网logo

android-在Fragment中以编程方式将视图添加到另一个视图(fragment创建视图方法)

14

此处将为大家介绍关于android-在Fragment中以编程方式将视图添加到另一个视图的详细内容,并且为您解答有关fragment创建视图方法的相关问题,此外,我们还将为您介绍关于AndroidCo

此处将为大家介绍关于android-在Fragment中以编程方式将视图添加到另一个视图的详细内容,并且为您解答有关fragment创建视图方法的相关问题,此外,我们还将为您介绍关于Android ConstraintLayout - 将一个视图放在另一个视图之上、android – 以编程方式在Fragment中使用ImageButton扩展布局、android – 以编程方式将ImageView添加到Layout、android – 以编程方式将列添加到表的有用信息。

本文目录一览:

android-在Fragment中以编程方式将视图添加到另一个视图(fragment创建视图方法)

android-在Fragment中以编程方式将视图添加到另一个视图(fragment创建视图方法)

我的代码出了点问题.我有一个表示片段布局的XML(fragment_layout.xml):

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

</LinearLayout>

另一个XML文件表示片段视图(element.xml)内的单个视图:

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

<TextView
    android:id="@+id/tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true" />

<EditText
    android:id="@+id/et"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:inputType="number"
    android:text="0" />

</RelativeLayout>   

这就是我在onCreateView方法中填充Fragment布局的方式:

View view = inflater.inflate(R.layout.fragment_layout, container,
            false);

    some_elements = getActivity().getResources().getStringArray(
            R.array.some_array);

    LinearLayout root = (LinearLayout) view.findViewById(R.id.root_layout);

    for (int i = 0; i < some_elements.length; i++) {

        View element = inflater.inflate(
                R.layout.element, container, false);

        TextView tv= (TextView) element.findViewById(R.id.tv);
        prodotto.setText(prodotti[i]);

        EditText et= (EditText) element.findViewById(R.id.et);

        root.addView(element);

    }

    return view; 

现在发生的是片段内仅显示“ some_elements”数组的第一个元素(该元素包含10个元素).为什么没有显示其他元素?怎么了?

解决方法:

问题是您的RelativeLayout中的android:layout_height =“ match_parent”.应该是wrap_content

Android ConstraintLayout - 将一个视图放在另一个视图之上

Android ConstraintLayout - 将一个视图放在另一个视图之上

起因:

将LinearLayout更改为ConstraintLayout
登录界面输入密码旁边的隐藏按钮无法点击

解决办法

在密码EditText加入

android:translationZ="1dp"

隐藏ImageView加入
android:translationZ="2dp"
组件由代码创建用以下来分层
PasswordText.setTranslationZ(1);

解析

View的大小位置都是通过x,y确定的,而现在有了z轴的概念,

而这个z值就是View的高度(elevation),而高度决定了阴影(shadow)的大小。

image

android – 以编程方式在Fragment中使用ImageButton扩展布局

android – 以编程方式在Fragment中使用ImageButton扩展布局

我是 android开发的新手,我当前正在使用tabhost创建一个应用程序,并使用tabactivity在不同的活动之间切换.这个应用程序工作正常,但我最近发现tabactivity已被弃用,我应该使用片段代替.

所以,我按照这个伟大的教程解释如何这样做:
http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/

大多数工作正常,但我的问题是我的一些旧活动,现在碎片是使用这种方法膨胀ImageButton:

private void displayLevelButtons() {
     LayoutInflater lf = getLayoutInflater();            
        btns = lf.inflate(R.layout.mallmapactivity_level_buttons,null,false);

        mBtnLevelDown = (ImageButton) btns.findViewById(R.id.btn_level_down);
        mBtnLevelUp = (ImageButton) btns.findViewById(R.id.btn_level_up);

        mBtnLevelDown.setonClickListener(new OnClickListener() {
          @Override
           public void onClick(View view) {                  
              levelDown();
              updateLevelButtons();
           }
       });
       mBtnLevelUp.setonClickListener(new OnClickListener() {
           @Override
           public void onClick(View view) {
              levelUp();
              updateLevelButtons();
           }
       });

       LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
       params.gravity = Gravity.BottOM | Gravity.CENTER_HORIZONTAL | Gravity.RIGHT;            
       addContentView(btns,params);

    }

为了能够在片段内编译此方法,我改变了:

LayoutInflater lf = getLayoutInflater();

LayoutInflater lf = getActivity().getLayoutInflater();

addContentView(btns,params);

getActivity().addContentView(btns,params);

但是像我这样使用我的方法displayLevelButtons()使我的按钮出现在我的一般视图的右下角,而不是我片段的右下角.

我还尝试在使用图像按钮扩充布局时指定一个根,我的所有片段类看起来像这样:

public class MyFragment extends Fragment {

    private View btns;        
    private ImageButton mBtnLevelUp;
    private ImageButton mBtnLevelDown; 
    private ViewGroup myViewGroup;

@Override
    public View onCreateView (LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
        if (container == null) {
            return null;
        }
        myViewGroup = container;
        v = inflater.inflate(R.layout.mallmaptile,container,false);           
        return v;
    }

 @Override
    public void onViewCreated(View view,Bundle savedInstanceState) {
        //Do some stuff and then :
            displayLevelButtons();        

    }

 private void displayLevelButtons() {
         LayoutInflater lf = getActivity().getLayoutInflater();          
         btns = lf.inflate(R.layout.mallmapactivity_level_buttons,myViewGroup,false);

         mBtnLevelDown = (ImageButton) btns.findViewById(R.id.btn_level_down);
         mBtnLevelUp = (ImageButton) btns.findViewById(R.id.btn_level_up);

         mBtnLevelDown.setonClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {                     
              levelDown();
              updateLevelButtons();
            }
        });
        mBtnLevelUp.setonClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
              levelUp();
              updateLevelButtons();
            }
        });

        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        params.gravity = Gravity.BottOM | Gravity.CENTER_HORIZONTAL | Gravity.RIGHT;            
        getActivity().addContentView(btns,params);

    }

这样做我的按钮仍显示在我的一般视图的底部,而不是在我的片段的底部,如果我尝试将attachToRoot布尔值更改为true:

btns = lf.inflate(R.layout.mallmapactivity_level_buttons,true);

我收到错误:java.lang.IllegalStateException:指定的子级已经有父级.您必须首先在孩子的父母上调用removeView().

我确信,我错过了一些重要但我不知道的事情.任何建议都会非常感激.

提前致谢,

解决方法

如果您在扩充布局时遇到问题,那么您可以使用以下代码:
View headerView = View.inflate(this,R.layout.layout_name,null);

这将为您提供完整的父布局,然后您可以使用该布局来获取您想要的任何视图,或者您可以获得布局参数,然后将布局参数设置为任何视图(在您认为的情况下按钮).

android – 以编程方式将ImageView添加到Layout

android – 以编程方式将ImageView添加到Layout

我想创建从屏幕上方向下的图像.

到今天为止我有这个:

ImageView mario = (ImageView) findViewById(R.id.mario);
TranslateAnimation anim = new TranslateAnimation(0f, 0f, 0, 400);
anim.setInterpolator(new LinearInterpolator());
anim.setRepeatCount(Animation.INFINITE);
anim.setDuration(800);
mario.startAnimation(anim);

问题是我必须在布局上的xml文件上设置imageview,这段代码只创建1张图片.

我想对应用程序进行编程,以在屏幕的上半部分创建几个图像(例如在循环中)并让它们下拉到屏幕上. (这里我在这里使用TranslateAnimation).
我找到了这样的东西:

ImageView mario = (ImageView) findViewById(R.drawable.mario);

但我不知道如何设置不在xml文件中的ImageView的位置(是否可能?).
我想创建LinearLayout并将其添加到ImageView.但是如何将linearlayout添加到现有布局?

提前致谢 :)

解决方法:

您可以使用类似的东西创建布局

View view = (View) findViewById(R.layout.current_layout); //the layout you set in `setContentView()`
LinearLayout picLL = new LinearLayout(CurrentActivity.this);
picLL.layout(0, 0, 100, 0);
picLL.setLayoutParams(new LayoutParams(1000, 60));
picLL.setorientation(LinearLayout.HORIZONTAL);
((ViewGroup) view).addView(picLL);

你在layout()中传递的参数显然取决于你想要的.然后,您可以创建单独的视图以添加到刚刚创建的布局.但我强烈建议您阅读文档,了解这里可以做些什么.

ViewGroup

View

编辑

ImageView myImage = new ImageView(this);
picLL.addView(myImage);
//set attributes for myImage;

android – 以编程方式将列添加到表

android – 以编程方式将列添加到表

我以编程方式将列添加到表中有些麻烦,也许我查找/搜索错误的关键字,但找不到合适的解决方案.

我得到了这段代码:

 ScrollView sv = new ScrollView(this);

         TableLayout ll=new TableLayout(this);
         horizontalscrollview hsv = new horizontalscrollview(this);
         TableRow tbrow=new TableRow(this);
         for(int i=0;i<mConnector.idArray.size();i++) {
             tbrow=new TableRow(this);         

                 TextView tv1=new TextView(this);
                 //String s1 = Integer.toString(i);
                 try {
                String insecticide = mConnector.insecticideArray.get(i);
                String wegedoornuis = mConnector.wegedoornluisArray.get(i);
                String dosering = mConnector.doseringArray.get(i);
                String prijs = mConnector.prijsArray.get(i);
                String bestuivers = mConnector.bestuiversArray.get(i);
                String roofvijanden = mConnector.roofvijandenArray.get(i);                    

               // String result = insecticide +" | "+wegedoornuis+" | "+dosering+" | "+prijs+" | "+bestuivers+" | "+roofvijanden;
               // int id = Integer.parseInt(s3);
                 tv1.setId(i);

                 tv1.setText(id);
                 tbrow.addView(tv1);
                 }catch(java.lang.indexoutofboundsexception e){

                 }

             ll.addView(tbrow);
         }
         hsv.addView(ll);
         sv.addView(hsv);
         setContentView(sv);

我想要的是每个String(在try {之后)获得自己的列.
就像String结果一样(评论标志现在是什么).但后来我可以调整列宽.

希望你们知道我的意思,否则我总是可以添加一张图片来说明.
编辑
快速制作图像:

解决方法:

您不能将字符串直接添加到视图中,但您可以使用文本视图执行相同的操作.我将向您展示我曾做过的一个例子,并让您弄清楚如何为自己使用它.

        TableRow row=new TableRow(this.getApplicationContext());
        TableLayout tlayout=new TableLayout(this.getApplicationContext());

        tlayout.setG@R_301_6099@ty(G@R_301_6099@ty.CENTER);
        tlayout.setBackgroundResource(R.color.background);

        row=new TableRow(this);

        TextView text1=new TextView(this.getApplicationContext());
        TextView text2=new TextView(this.getApplicationContext());
        TextView text3=new TextView(this.getApplicationContext());

        text1.setText(R.string.name);
        row.addView(text1);
        text2.setText(R.string.level);
        row.addView(text2);
        text3.setText(R.string.score);
        row.addView(text3);
        tlayout.addView(row);
        for (i=0;i<10;i++)
        {
            row=new TableRow(this.getApplicationContext());
            text1=new TextView(this.getApplicationContext());
            text2=new TextView(this.getApplicationContext());
            text3=new TextView(this.getApplicationContext());


            text1.setText(high_score_name.get(i));
            row.addView(text1);
            text2.setText(""+high_score_level.get(i));
            row.addView(text2);
            text3.setText(""+high_score_score.get(i));
            row.addView(text3);
            tlayout.addView(row);
        }

基本上,high_scores _…. get(i)返回一个字符串.非常相似的东西应该适用于您的目的.

输出看起来像这样,继续向下10行.

name1  score1  level1
name2  score2  level2

今天关于android-在Fragment中以编程方式将视图添加到另一个视图fragment创建视图方法的介绍到此结束,谢谢您的阅读,有关Android ConstraintLayout - 将一个视图放在另一个视图之上、android – 以编程方式在Fragment中使用ImageButton扩展布局、android – 以编程方式将ImageView添加到Layout、android – 以编程方式将列添加到表等更多相关知识的信息可以在本站进行查询。

本文标签: