D
Daepilin
Neues Mitglied
- 1
Hio 
Ich hab ein Problem: Ich möchte in einer App eine Spielermenge eingeben können und das layout für die eingaben der namen dynamisch anpassen. Dazu hab ich mir ein layout von RelativeLayout abgeleitet und darin ein TextView und ein EditText eingefügt.
Von dieser Klasse füge ich jetzt n Objekte (n = spieleranzahl) zu meinem hauptlayout hinzu. Wenn ich Mit jetzt das Hauptlayout im debugger angucke sind die elemente auch dadrinnen, werden aber nicht angezeigt
CustomKlasse:
Und meine Mainactivity: (bzw das wichtige daraus)
Hab zwar auchschon rumgesucht, finde aber nich wirklich was :/
Bin jetzt hier davon ausgegangen, dass das wie bei nem normalen viewobjekt geht, scheinbar tut es das nicht. (Denn das hab ich in nem anderen projekt schon hinbekommen)
Ich hab ein Problem: Ich möchte in einer App eine Spielermenge eingeben können und das layout für die eingaben der namen dynamisch anpassen. Dazu hab ich mir ein layout von RelativeLayout abgeleitet und darin ein TextView und ein EditText eingefügt.
Von dieser Klasse füge ich jetzt n Objekte (n = spieleranzahl) zu meinem hauptlayout hinzu. Wenn ich Mit jetzt das Hauptlayout im debugger angucke sind die elemente auch dadrinnen, werden aber nicht angezeigt

CustomKlasse:
Code:
//Paketnamen und nen import entfernt
import android.content.Context;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class PlayerCreateView extends RelativeLayout {
private String mPlayerName;
private int mPlayerID;
private TextView mPlayerCreateText;
private EditText mPlayerCreateInput;
Context mContext;
public PlayerCreateView(Context context, int id) {
super(context);
mPlayerID = id;
mContext = context;
createTextView();
createEditText();
this.invalidate();
}
public PlayerCreateView(Context context){
super(context);
mContext = context;
}
/**
* Textview erstellen
*/
public void createTextView(){
mPlayerCreateText = new TextView(mContext);
mPlayerCreateText.setId(1);
//Inhalt setzten
String content = R.string.string_player_constant + ": " + String.valueOf(mPlayerID);
mPlayerCreateText.setText(content);
//Setze Parameter
LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
params.setMargins(R.dimen.standard_element_margin_half, R.dimen.standard_element_margin_half, R.dimen.standard_element_margin_half, R.dimen.standard_element_margin_half);
//Füge zu Layout hinzu
this.addView(mPlayerCreateText, params);
}
public void createEditText(){
mPlayerCreateInput = new EditText(mContext);
mPlayerCreateInput.setId(2);
//Inhalt setzen
String content = R.string.string_player_constant + " " + String.valueOf(mPlayerID) + " Name";
mPlayerCreateInput.setText(content);
//Setze Parameter
LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.RIGHT_OF, mPlayerCreateText.getId());
params.setMargins(R.dimen.standard_element_margin_half, R.dimen.standard_element_margin_half, R.dimen.standard_element_margin_half, R.dimen.standard_element_margin_half);
//Füge zu Layout hinzu
this.addView(mPlayerCreateInput, params);
}
/////Getter/////
public String getPlayerName() {return mPlayerName;}
public int getPlayerID() {return mPlayerID;}
public TextView getPlayerCreateText() {return mPlayerCreateText;}
public EditText getPlayerCreateInput() {return mPlayerCreateInput;}
/////Setter/////
public void setPlayerName(String playerName) {this.mPlayerName = playerName;}
public void setPlayerID(int playerID) {this.mPlayerID = playerID;}
public void setPlayerCreateText(TextView playerCreateText) {this.mPlayerCreateText = playerCreateText;}
public void setPlayerCreateInput(EditText playerCreateInput) {this.mPlayerCreateInput = playerCreateInput;}
}
Und meine Mainactivity: (bzw das wichtige daraus)
Code:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player_select);
mContext = this;
mPlayerCountBar = (SeekBar) findViewById(R.id.seek_set_player_count);
mPlayerCountView = (TextView) findViewById(R.id.tv_player_count);
mLayout = (RelativeLayout) findViewById(R.id.RelLay_PlayerSelect);
mPlayerView = null;
//OnSeekBarChangeListener implementieren um veränderungen der SeekBar abzufragen und daraufhin das Layout zu bauen
mPlayerCountBar.setOnSeekBarChangeListener(
new OnSeekBarChangeListener(){
public int mPlayerCount;
@Override
public void onProgressChanged(SeekBar seekbar, int progressValue, boolean fromUser){
mPlayerCount = progressValue + 1;
String tmpTextViewContent = (String) mPlayerCountView.getText();
char[] tmpTextViewContentArray = tmpTextViewContent.toCharArray();
int tmpTextViewContentLength = tmpTextViewContent.length();
tmpTextViewContentArray[tmpTextViewContentLength - 1] = String.valueOf(mPlayerCount).charAt(0);
tmpTextViewContent = new String(tmpTextViewContentArray);
mPlayerCountView.setText(tmpTextViewContent);
}
@Override
public void onStartTrackingTouch(SeekBar seekbar){
}
@Override
public void onStopTrackingTouch(SeekBar seekbar){
//TODO: Layout bauen
System.out.println("Building Layout...");
if(mPlayerView != null){
for(int i = 0; i < mPlayerView.length; i++){
mLayout.removeView(mPlayerView[i]);
}
}
mPlayerView = new PlayerCreateView[mPlayerCount];
for(int i = 0; i < mPlayerCount; i++){
mPlayerView[i] = new PlayerCreateView(mContext, i);
mPlayerView[i].setId(i);
LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(0, 0, 0, 0);
params.addRule(RelativeLayout.ALIGN_LEFT);
if(i >= 1)params.addRule(RelativeLayout.BELOW, mPlayerView[i-1].getId());
else{
params.addRule(RelativeLayout.BELOW, R.id.tv_player_count);
params.setMargins(0, R.dimen.standard_element_margin, 0, 0);
}
mLayout.addView(mPlayerView[i], params);
}
}
});
}
Hab zwar auchschon rumgesucht, finde aber nich wirklich was :/
Bin jetzt hier davon ausgegangen, dass das wie bei nem normalen viewobjekt geht, scheinbar tut es das nicht. (Denn das hab ich in nem anderen projekt schon hinbekommen)