Woow, thank you! I will try it! :-) Greetings, Martin On 22 Sep., 01:51, Peter Carpenter <[email protected]> wrote: > It's not hard - just lots of maths.... > > Android gives some vague documentation here: > http://developer.android.com/guide/topics/ui/custom-components.html > > I've provided a sample class that does its own layout - it's not pretty, but > should give you an idea of what's involved. I've no idea how you'd create a > generic layout that you can use in your xml or eclipse layout editor - sorry. > Hopefully someone else can provide a few tips on how to do this. > > The following class contains 3 child objects - a button, a text view & an > edit text. I probably could have used a relative layout for this, but I > wanted to do a few other things too (that I've removed to keep this example > simple). Here I specifically wanted the component to be limited to the > height of the button (as thin as possible) and the remaining space split > evenly between the textView and the editView, with appropriate padding in > between. > > Note the following: > In onMeasure - I call measure on all of the child components, and call > setMeasuredDimension at the end. onMeasure can be called in a number of > modes and can definitely get quite complex. :( Read the following > > In onLayout - I call layout on all of the children. You should really use > the child dimensions calculated in the last call of onMeasure by calling > [child].getMeasuredHeight()/getMeasuredWidth() but I didn't as the values > shouldn't have changed. > > RequestLayout is a call that recursively travels up the component heirachy > until it reaches the ViewRoot and triggers a relayout of the entire screen. > EditTexts and other components like to call this when their contents change > so that they can grow and cause layouts as you type. If this is annoying, > you can override it to prevent this from happening. > > Hope this helps rather than confuses, > > Peter. > > public class DataViewController extends ViewGroup > { > TextView textView; > ApcEditText editText; > Button ddButton; > > private static final int BUTTON_PAD = 2; > > public DataViewController(Context context, TableComponent tc) > { > super(context); > > textView = new TextView(context); > textView.setText("Text"); > addView(textView); > > ddButton = new Button(context); > addView(ddButton); > > editText = new ApcEditText(context, null, true); > addView(editText); > } > > @Override > public void requestLayout() > { > // Prevent changes in the child components from causing the layout > // to be recalculated. (You don't necessarily have to overwrite > this) > } > > @Override > protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) > { > int hSize = MeasureSpec.getSize(heightMeasureSpec); > int hMode = MeasureSpec.getMode(heightMeasureSpec); > > ddButton.measure(0, MeasureSpec.makeMeasureSpec(hMode, hSize - > getPaddingLeft() - getPaddingRight())); > > int h = ddButton.getMeasuredHeight() + getPaddingTop() + > getPaddingBottom(); > int minWidth = ddButton.getMeasuredWidth() + 2 * BUTTON_PAD + > getPaddingLeft() + getPaddingRight(); > int wSize = MeasureSpec.getSize(widthMeasureSpec); > int w = (wSize - minWidth) / 2; > > textView.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.EXACTLY, > w), > MeasureSpec.makeMeasureSpec(MeasureSpec.EXACTLY, h)); > editText.measure(MeasureSpec.makeMeasureSpec(MeasureSpec.EXACTLY, > w), > MeasureSpec.makeMeasureSpec(MeasureSpec.EXACTLY, h)); > > setMeasuredDimension(wSize, h); > } > > @Override > protected void onLayout(boolean changed, int l, int t, int r, int b) > { > int left = getPaddingLeft(); > int top = getPaddingTop(); > int right = r - l - getPaddingRight(); > int bottom = b - t - getPaddingBottom(); > > int minWidth = ddButton.getMeasuredWidth() + 2 * BUTTON_PAD + > getPaddingLeft() + getPaddingRight(); > int w = (r - l - minWidth) / 2; > > textView.layout(left, top, left + w, bottom); > editText.layout(left + w + BUTTON_PAD, top, left + BUTTON_PAD + w > * 2, bottom); > ddButton.layout(right - ddButton.getMeasuredWidth(), top, right, > bottom); > } > } > > > > -----Original Message----- > From: [email protected] > [mailto:[email protected]] On Behalf Of Martin > Sent: Wednesday, 22 September 2010 3:56 AM > To: Android Developers > Subject: [android-developers] Re: Exact Layout that fits a background image > > Woow this sounds very hard. Is it explained somewhere how to do this, > or is there an example? > If I create my own layout-class, can I still use the Layout-Editor > with eclipse? > Greetings, Martin > > On 21 Sep., 02:10, Peter Carpenter > <[email protected]> wrote: > > You can create your own class that extends ViewGroup and override the > > layout/onMeasure functions to explicitly define your own layout. > > Not sure of how to do this via xml though. > > > -----Original Message----- > > From: [email protected] > > [mailto:[email protected]] On Behalf Of Martin > > Sent: Tuesday, 21 September 2010 8:02 AM > > To: Android Developers > > Subject: [android-developers] Exact Layout that fits a background image > > > Hi! > > > I have a background image (full screen) and want to create an exact > > layout, which fits this background-image. The buttons and labels have > > to be at an exact place of the background-image. How can I do this? > > The absolute-layout is deprecated. If I use relative layout, I can use > > margins, but the positions differ from device to device. > > > The best thing is if I could set the exact positions as percent of the > > total view size. How can I do this? > > > Greetings, Martin > > > -- > > You received this message because you are subscribed to the Google > > Groups "Android Developers" group. > > To post to this group, send email to [email protected] > > To unsubscribe from this group, send email to > > [email protected] > > For more options, visit this group > > athttp://groups.google.com/group/android-developers?hl=en > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group > athttp://groups.google.com/group/android-developers?hl=en
-- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

