gpt4 book ai didi

c# - 可以在运行时填充 Android Activity 吗?

转载 作者:行者123 更新时间:2023-11-30 00:38:52 26 4
gpt4 key购买 nike

虽然典型的过程是使用 AXML 定义屏幕的内容,但是否可以在运行时填充 Activity ?

像这样:

override void OnCreate(Bundle bundle){
base.OnCreate(bundle);

// INSTEAD OF THIS:
var toolbar = FindViewById<Toolbar>(....);

// CAN I DO THIS?
var toolbar = New<Toolbar>(....);
}

最佳答案

这是帮助您入门的示例代码

在 XAMARIN 中使用 C#

var layout = new LinearLayout (this);
layout.Orientation = Orientation.Vertical;

var aLabel = new TextView (this);
aLabel.Text = "Hello, World!!!";

var aButton = new Button (this);
aButton.Text = "Say Hello!";

aButton.Click +=(sender, e) =>
{aLabel.Text="Hello Android!";};

layout.AddView (aLabel);
layout.AddView (aButton);
SetContentView (layout);

在 ANDROID STUDIO 中使用 JAVA

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;
import android.widget.LinearLayout.LayoutParams;

public class DynamicLayoutActivity extends Activity implements OnClickListener{

private static final int MY_BUTTON = 9000;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout2);

// add text view
TextView tv = new TextView(this);
tv.setText("Dynamic Text!");
ll.addView(tv);

// add edit text
EditText et = new EditText(this);
et.setText("Dynamic EditText!");
et.setMinLines(1);
et.setMaxLines(3);
ll.addView(et);

// add button
Button b = new Button(this);
b.setText("Button added dynamically!");
b.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
b.setId(MY_BUTTON);
b.setOnClickListener(this);
ll.addView(b);

//add checkboxes
for(int i = 0; i < 10; i++) {
CheckBox cb = new CheckBox(this);
cb.setText("Dynamic Checkbox " + i);
cb.setId(i+10);
ll.addView(cb);
}

//add radio buttons
final RadioButton[] rb = new RadioButton[5];
RadioGroup rg = new RadioGroup(this); //create the RadioGroup
rg.setOrientation(RadioGroup.HORIZONTAL);//or RadioGroup.VERTICAL
for(int i=0; i<5; i++){
rb[i] = new RadioButton(this);
rb[i].setText("Dynamic Radio Button " + i);
rb[i].setId(i);
rg.addView(rb[i]); //the RadioButtons are added to the radioGroup instead of the layout

}
ll.addView(rg);//you add the whole RadioGroup to the layout

// add Toggle button
ToggleButton tb = new ToggleButton(this);
tb.setTextOn("Dynamic Toggle Button - ON");
tb.setTextOff("Dynamic Toggle Button - OFF");
tb.setChecked(true);
tb.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
ll.addView(tb);

}

public void onClick(View v) {
Toast toast;
Log.w("ANDROID DYNAMIC VIEWS:", "View Id: " + v.getId());
switch (v.getId()) {
case MY_BUTTON:
toast = Toast.makeText(this, "Clicked on my dynamically added button!", Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP, 25, 400);
toast.show();
saveAnswers();
break;
// More buttons go here (if any) ...

}
}

public void saveAnswers() {
LinearLayout root = (LinearLayout) findViewById(R.id.linearLayout1); //or whatever your root control is
loopQuestions(root);
}

private void loopQuestions(ViewGroup parent) {
for(int i = 0; i < parent.getChildCount(); i++) {
View child = parent.getChildAt(i);
if(child instanceof RadioGroup ) {
//Support for RadioGroups
RadioGroup radio = (RadioGroup)child;
storeAnswer(radio.getId(), radio.getCheckedRadioButtonId());
}
else if(child instanceof CheckBox) {
//Support for Checkboxes
CheckBox cb = (CheckBox)child;
int answer = cb.isChecked() ? 1 : 0;
storeAnswer(cb.getId(), answer);
}
else if(child instanceof EditText) {
//Support for EditText
EditText et = (EditText)child;
Log.w("ANDROID DYNAMIC VIEWS:", "EdiText: " + et.getText());
}
else if(child instanceof ToggleButton) {
//Support for ToggleButton
ToggleButton tb = (ToggleButton)child;
Log.w("ANDROID DYNAMIC VIEWS:", "Toggle: " + tb.getText());
}
else {
//Support for other controls
}

if(child instanceof ViewGroup) {
//Nested Q&A
ViewGroup group = (ViewGroup)child;
loopQuestions(group);
}
}
}

private void storeAnswer(int question, int answer) {
Log.w("ANDROID DYNAMIC VIEWS:", "Question: " + String.valueOf(question) + " * "+ "Answer: " + String.valueOf(answer) );

Toast toast = Toast.makeText(this, String.valueOf(question) + " * "+ "Answer: " + String.valueOf(answer), Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP, 25, 400);
toast.show();


}

}

关于c# - 可以在运行时填充 Android Activity 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42887130/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com