我有动态改变文本的问题TextView
在PopupWindow
Android中.我已使用a 引用了TextView
内部元素,但文本未更新.任何帮助将非常感谢!:)PopupWindow
LayoutInflater
ViewGroup
我的代码如下:
private void popupWindow() {
try {
LayoutInflater inflater = (LayoutInflater) SwingSpeed.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.popup_recording,
(ViewGroup) findViewById(R.id.popup_element));
pw = new PopupWindow(inflater.inflate(R.layout.popup_recording,
null, false), 480, 800, true);
pw.showAtLocation(findViewById(R.id.swingspeed), Gravity.CENTER, 0,
0);
recording_text = (TextView) layout
.findViewById(R.id.recording_text);
recording_text.setText("Recording"); //Update the TextView
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud) 我一直在尝试将视图从xml扩展到相应的视图对象,然后将这些视图对象添加到编程的视图组中.但是,每当我调用myviewgroup.addView(子视图)时,子视图似乎都会丢失xml代码应该给出的所有按钮和内容.但是,子视图确实具有的一个方面是我编写的背景颜色,以确保为子视图提供正确的尺寸.子视图具有正确的尺寸,但其组件均不可见
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
viewchanger= new ViewChanger(this); //my viewgroup
View mainmenu= inflater.inflate(R.layout.main, null); //the xml code
mainmenu.setBackgroundColor(Color.rgb(0, 0, 255));
viewchanger.addView(mainmenu);
setContentView(viewchanger);
Run Code Online (Sandbox Code Playgroud)
上面的代码只是将我的屏幕背景设置为蓝色,但没有任何按钮显示.另外,当我setContentView(mainmenu)时,一切都完全从那个xml代码和背景颜色中显示出来.这个视图组的要点是,我可以在多个视图中的任何一个视图之间切换,而不管它们作为子视图的顺序.
这是viewchanger的代码.我希望它有7个子视图,当我调用方法setView(int v)时,我希望所有其他视图都消失,我只希望那个视图可见.
public class ViewChanger extends ViewGroup{
/**Represent which view to show, only one can show at a time*/
public static final int MainMenu=0, ChooseMap=1, MapOptions=2,
SetLocation=3, view=4, EditMap=5, CreateMap=6;
private int current; //the current view
private View[] views= new View[7];
public ViewChanger(Context context) {
super(context);
//load 7 views into view array here
//LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); …
Run Code Online (Sandbox Code Playgroud) 首先,我创建了一个自定义视图,通过覆盖该onDraw()
方法来吸引自己.事实证明这是不切实际的,因为我需要创建大量的视图.所以我创建了一个自定义的ViewGroup,它使用该onLayout()
方法绘制每个子节点.
我在android文档中读到了子视图应该实现一个layout()
方法.但是我创建的子视图使用onDraw方法绘制自己.我该怎么处理?我应该摆脱这种onDraw()
方法吗?任何人都可以举例说明该layout()
方法的工作原理以及我应该如何将我的onDraw()
方法"转换" 为layout()
方法?
我目前的onDraw()
方法如下:
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
//Draw Border.
canvas.drawRect(mCellBounds, mBorderPaint);
//Draw Background.
canvas.drawRect(mBackgroundBounds, mBackGroundPaint);
//Draw Value if not 0.
if(Value != 0)
canvas.drawText(Integer.toString(Value), ValueX, ValueY, mNumberPaint);
//Draw Notes if Value == 0.
else
{
for(int i = 0 ; i < 9 ; i++)
if(NoteList[i])
canvas.drawText(Integer.toString(i), NoteX + ((i%3) * NoteMeasureX), NoteY + ((i/3) * NoteMeasureY), mNotePaint);
}
}
Run Code Online (Sandbox Code Playgroud) 我花了一整天的时间调试各种方法将自定义添加ViewGroup
到另一个自定义中,ViewGroup
并且几乎疯了,因为它们都不起作用,并且没有官方文档或示例显示它是如何完成的...
基本上,我有2个自定义ViewGroup
:
HorizontalDockView
扩展 ViewGroup
GameEntryView
扩展 FrameLayout
HorizontalDockView
覆盖onDraw
,onMeasure
等一切通常被称为和完美的作品.但是,当我创建GameEntryView
从里面HorizontalDockView
的构造,并调用addView(gameEntryView)
时,gameEntryView
永远不会显示不管layoutParams
,addView
无论从任何线程调用的,但是还是我打电话,负载,并在父母的setContentView HorizontalDockView
.如果我列出horizontalDockView.getChildAt();
所有gameEntryView
对象仍然存在.
无望,我试图通过GameEntryView的调试onDraw
,onMeasure
,dispatchDraw
方法和实现他们没有真正被调用!不......甚至没有一次!
我是否需要在*调用中遍历父级(HorizontalDockView)中的所有子视图并在*上显式调用子级?我只是在父母身上调用super.on*().
我确实调用setWillNotDraw( false );
了父类和子类.
如何让孩子出现在父母的视野中?简单的样本或现有的小型开源项目非常感谢!
非常感谢你!
如何在运行时从自定义ViewGroup中的TextView类型的子类中获取"getText()"?
我有一个自定义视图,我称之为"节点",它是一个名为"NodeGrid"的自定义ViewGroup的子节点."NodeGrid"类更具体地扩展了RelativeLayout.
我在自定义视图类("Node")中有以下代码片段:
private boolean isBeingDragged = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
isBeingDragged = true;
}
else if (event.getAction() == MotionEvent.ACTION_UP)
{
isBeingDragged = false;
}
else if (event.getAction() == MotionEvent.ACTION_MOVE)
{
if (isBeingDragged)
{
float xPosition = event.getX();
float yPosition = event.getY();
//change the x and y position here
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
问题:
在这段代码中有设置断点后,它似乎像的onTouchEvent获取调用只为MotionEvent.ACTION_DOWN情况下,而不是任何的另外两起案件("动作"或"动作移动").有没有人知道可能导致这种情况发生的任何事情?
另外(可能是相关的):
不要紧,如何视图被添加到一个ViewGroup?我注意到除了"addView"之外,还有其他方法可以将子项添加到ViewGroup,例如"addFocusables"和"addTouchables".现在我只是使用"addView"将子视图添加到ViewGroup.
我有一个ViewPager
在我的Kindle Fire应用程序,增加了每页大约30次Activity
.添加位图后没有对位图的引用(在本地语句块关闭后,vars会丢失).
删除父视图时,回收所有位图的最简单方法是什么?我需要这样做,因为在刷了几页后,我的应用程序关闭了,因为没有更多的内存可以分配,因为显然非回收的位图不会释放内存.
思考?
由于我不确定这会被称为什么,我使用搜索引擎找不到任何答案.我使用多态来动态地更改活动的根元素的属性.
我正在使用以下代码来获取活动的根元素,通常是LinearLayout或RelativeLayout.
ViewGroup layout = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
Run Code Online (Sandbox Code Playgroud)
由于我想动态地将RelativeLayout中的内容添加到活动中,我想测试ViewGroup(布局),如果它是RelativeLayout或LinearLayout.
有没有办法做到这一点?没有尝试强制转换每个并捕获异常?
请详细解释 viewholder 和 viewgroup 之间的差异,如果它们相似或用于相似目的,请告诉我一个相对于另一个的优势。
android ×9
viewgroup ×9
view ×3
java ×2
android-view ×1
bitmap ×1
inflate ×1
layout ×1
polymorphism ×1
popupwindow ×1
recycle ×1
textview ×1
touch-event ×1
xml ×1