Android :: XML Layout Of Custom Component
Jul 9, 2010
I have created a simple class named Panel which extends the SurfaceView class and does some drawing in the onDraw method. When I use it from the code it works fine. For example this works as expected:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new Panel(this)); ....
However when I try adding this component from an xml layout the program crashes:
XML file (main.xml):
<?xml version="1.0" encoding="utf-8"?> <org.anddev.Panel android:id="@+id/panel" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"/>
Code:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);....
Error msg: Sorry!
The application Test (process org.anddev) has stopped unexpectedly. Pleas try again.
I can not figure out why the same class works when created in one way and doesn't work when created in another.
View 3 Replies
Nov 7, 2009
I have a res/layout/main.xml including these elements and others:
<some.package.MyCustomView android:id="@+id/foo" (some other params) />
<TextView android:id="@+id/boring" (some other params) />
In my Activity's onCreate, I do this:
setContentView(R.layout.main);
(TextView) boring = findViewById(R.id.boring);
// ...find other elements...
MyCustomView foo = (MyCustomView) findViewById(R.id.foo);
if (foo == null) { Log.d(TAG, "epic fail"); }
The other elements are found successfully, but foo comes back null. MyCustomView has a constructor MyCustomView(Context c, AttributeSet a) and a Log.d(...) at the end of that constructor appears successfully in logcat just before the "epic fail".
findViewById() returns null for custom component in layout XML, not for other components. Why is foo null?
View 2 Replies
View Related
Nov 10, 2009
Imagine I have a toolbar implemented as a horizontal LinearLayout as follows:
[___Button1____] [___Button2___] [___Button3___] [___Button4___]
When someone clicks on Button2, I want the toolbar to change to:
[___Button1____] [___________Button2___________] [___Button3___]
The toolbar should transition from the first state to the second state through a smooth animation. I would like to use a scale animation on Button2, and while that is happening, Button3 and Button 4 should move to the right (while the animation is going on). At the end of the animation (or maybe during), I will fade Button4 out.
Question: How do I achieve an animation of the layout of the toolbar such that only one component (i.e. Button2) is being scaled while the others are not being scaled - the layout is simply updated during the animation of Button2.
I looked at LayoutAnimationController, but it does not appear to allow me to either:
1. specify different animations for the different components, OR
2. indicate that only animate one component and don't animate the others.
I can't scale the entire toolbar because that distorts Button1/3/4 which I don't want.
View 1 Replies
View Related
Feb 18, 2010
I'll preface this with, I've just started learning Android so be gentle.
I come from an ASP.NET / Silverlight background so I was looking for something along the lines of controls.
I want to reuse a layout (a ListView item template) in other layouts.
Such that in my other layouts I can just add <myListItem /> to show it.
Is this, or anything like it possible? or are there better ways?
View 3 Replies
View Related
Mar 29, 2010
I'm trying to create a component using an xml layout file. I defined a layout with some custom attributes. This layout is inflated when user add it inside another layout. My problem is I don't know the parent, so I pass null for the parent viewgroup when I call inflate method. I think that's the reason why I see anything in my view. Do you know how can I do (I don't want to redefine onDraw method because I use existing component). Below my xml layout and my custom class.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content">
<ImageView android:id="@+id/img_btn_option" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
<TextView android:id="@+id/txt_btn_option" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_toRightOf="@id/img_btn_option"
android:textColor="@color/font_white" android:textStyle="bold"/>
</RelativeLayout> public class ButtonOptionsView extends View {
public ButtonOptionsView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater li =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
RelativeLayout vg =(RelativeLayout)li.inflate(R.layout.button_option, null);
TypedArray ta = getContext().obtainStyledAttributes(attrs,R.styleable.ButtonOption);
((ImageView)vg.findViewById(R.id.img_btn_option)).setImageResource(ta.getResourceId(R.styleable.ButtonOption_image,0));
((TextView)vg.findViewById(R.id.txt_btn_option)).setText(ta.getResourceId(R.styleable.ButtonOption_text,0));}
View 4 Replies
View Related
Dec 8, 2009
I've made a little test component that overrides ImageView, called myImageView, and prints some text and an arrayList of Doubles over whatever image is specified in the related xml. However, right now, the text and Doubles that are drawn over the image are defined within the myImageView class. Is there a way to pass the data from the main onCreate function to the myImageView class before the layout is drawn?
I'm new to OO programming, but based on my understanding of this:
http://developer.android.com/guide/topics/ui/custom-components.html
It's possible because ImageView is just like any other class. This leaves me with two initial guesses:
1. I could generate my test data in the main onCreate, and store it in the array's xml file, and then read that xml file with myImageView,
OR
2. I could extend view instead of ImageView, but because of my new- ness, then I would lose the ability to use it in an xml layout sense - and that's what I really want.
View 2 Replies
View Related
Dec 9, 2009
I've prepared custom component based on LinearLayout. Whole component is defined in XML. Currently to use it you have to write:
<com.xxx.android.components.TopMenu
android:layout_width="fill_parent"
android:layout_height="44dp" />
Is it possible to set width and height in the java constructor? So it would be possible to write just:
<com.xxx.android.components.TopMenu />
I've tried to modify and set LayoutParams, but it didn't work for me.
View 1 Replies
View Related
Aug 16, 2009
I've created custom compound component and observe very strange exception (google says nothing about it). Custom component rare exception: Parser is not a BridgeXmlBlockParser!
It is very simple:
public class MyTabber extends LinearLayout {
.. public MyTabber(Context context) { super(context);
Init(context); }
View 2 Replies
View Related
Jun 12, 2010
I have made a Custom Component in XML, consisting of a button with an imageview stacked on top of it:
<myapp.widget.ClearableCaptionedButton
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/ccbutton_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical|left"
android:textAppearance="?android:attr/textAppearanceMedium"
android:background="@android:drawable/edit_text"/>
<ImageView
android:id="@+id/ccbutton_clear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dip"
android:layout_alignRight="@id/ccbutton_button"
android:layout_alignTop="@id/ccbutton_button"
android:layout_alignBottom="@id/ccbutton_button"/>
</myapp.widget.ClearableCaptionedButton>
Extract of java source code:
public class ClearableCaptionedButton extends RelativeLayout implements OnClickListener {
...
public ClearableCaptionedButton(Context context, AttributeSet attrs) { super(context, attrs);
// some stuff that works fine
} ..
protected void onFinishInflate() { super.onFinishInflate();
mButton = (Button) findViewById(R.id.ccbutton_button);
mClear = (ImageView) findViewById(R.id.ccbutton_clear);
mButton.setText(""); // error here: mButton == null
}
My problem is similar to this one. When I try to find the views inside the custom compound, findViewById returns null. But, as you can see, i already added super(context, attrs); to the constructor. I am using the custom component directly in xml layout, like this:
<LinearLayout>
<!-- some stuff -->
<myapp.widget.ClearableCaptionedButton
android:layout_width="fill_parent"
android:layout_height="wrap_content"
app:caption="to"/>
</LinearLayout>
View 1 Replies
View Related
Jun 11, 2010
I'd like to create a custom component which supports voice recognition. (Custom Component which displays voice recognition button if available). It will primarily be an extended EditText which should show the microphone button for voice recognition if it is available. I wanted to to look at the search app-widget on the homescreen but I don't find it in the source. This is intended to use the voice recognition as some sort of dictation device, i.e. the user does not have to type but use his voice instead. So could anyone please point me in some direction?
View 1 Replies
View Related
Nov 5, 2010
I'm developing a small application in with a list view filled with a compound component. This component has two text view and one button inside. One of the text view is invisible and when the button is clicked it should appear. I can show the list but i can't make the textview visible when the button is clicked. Here is the xml of the component: And this is the ArrayAdapter that fills the list:
public class AddressAdapter extends ArrayAdapter { int resource;
RelativeLayout placeView;
EditText addressText;
public AddressAdapter(Context _context, int _resource, List _items) {
super(_context, _resource, _items);
resource = _resource;
} private OnClickListener buttonClick = new OnClickListener() {
public void onClick (View v) {
int i = placeView.findViewById(R.id.stub_import).getVisibility();
visibility(i);
} };
private void visibility(int i) {
// TODO Auto-generated method stub switch(i) {
case(View.GONE): { addressText.setVisibility(View.VISIBLE);
} case(View.VISIBLE): { addressText.setVisibility(View.GONE);
} } }
@Override public View getView(int position, View convertView, ViewGroup parent) {
Item item = getItem(position);
String name = item.getName();
String address = item.getAddress();
if (convertView == null) {
placeView = new RelativeLayout(getContext());
String inflater = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(inflater);
vi.inflate(resource, placeView, true);
} else { placeView = (RelativeLayout) convertView;
} TextView nameText = (TextView)placeView.findViewById(R.id.placeNamwView);
Button button = (Button)placeView.findViewById(R.id.Button01);
addressText = (EditText)placeView.findViewById(R.id.placeAddressText);
button.setOnClickListener(buttonClick);
nameText.setText(name);
addressText.setText(address);
return placeView;
} }
View 2 Replies
View Related
Oct 29, 2009
The app I'm working on has 4 tabs, 3 of which share many features, including a navigation bar a the bottom with Back, Edit, and Map buttons. There is exactly the same xml in all 3 layouts, so I'm trying to DRY this out by extracting that xml into a separate component, including it, and then going from there. Previously I had:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/showedit_toolbar" style="@style/showItemToolbar">
<ImageButton android:id="@+id/show_person_back_button"
style="@style/blackToolbarButton"
android:src="@drawable/left_white_arrow"
android:layout_alignParentLeft="true"/>
<Button android:id="@+id/show_person_map_button"
style="@style/blackToolbarButton"
android:text="map" android:layout_alignParentRight="true"/>
<Button android:id="@+id/show_person_edit_button"
style="@style/blackToolbarButton"
android:text="edit" android:layout_toLeftOf="@id/show_person_map_button"/>
</RelativeLayout>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_above="@id/showedit_toolbar"
style="@style/CoinLightTheme">
// Lots more layout omitted
I extracted out the bit that's repeated into an xml file called show_toolbar.xml, changing the names of variables to make it more generic across the 3 views
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/show_toolbar" style="@style/showItemToolbar">
<ImageButton style="@style/blackToolbarButton"
android:src="@drawable/left_white_arrow"
android:layout_alignParentLeft="true"
android:id="@+id/show_back_button"/>
<Button android:id="@+id/show_map_button"
style="@style/blackToolbarButton"
android:text="map" android:layout_alignParentRight="true"/>
<Button android:id="@+id/show_edit_button" style="@style/blackToolbarButton"
android:text="edit" android:layout_toLeftOf="@id/show_map_button"/>
</RelativeLayout>
Then from within my original layout file, I replaced that big block of code with
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" android:layout_width="fill_parent">
<include android:id="@+id/show_toolbar" layout="@layout/show_toolbar"/>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent" android:layout_width="fill_parent"
android:layout_above="@id/showedit_toolbar" style="@style/CoinLightTheme">
Now, the problem is that the view no longer shows up. Including Custom component causes it to be hidden behind main viewI can still click the buttons and they respond (i.e. if I click in the corner where the button should be, it still works), but I cannot see the buttons or bar onto which they were drawn. I cannot find very good documentation on how Include is supposed to work, so perhaps I am using it incorrectly.
View 1 Replies
View Related
Sep 25, 2009
The Android app I'm currently developing has a main activity that has grown quite large. This is mainly because it contains a TabWidget with 3 tabs. Each tab has quite a few components. The activity has to control of all those components at once. So I think you can imagine that this Activity has like 20 fields (a field for almost every component). Also it contains a lot of logic (click listeners, logic to fill lists, etc). What I normally do in component based frameworks is to split everything up into custom components. Each custom component would then have a clear responsibility. It would contain it's own set of components and all other logic related to that component.
I tried to figure out how this can be done, and I found something in the Android documentation what they like to call a "Compound Control".
(See http://developer.android.com/guide/topics/ui/custom-components.html and scroll to the "Compound Controls" section) I would like to create such a component based on an XML file defining the view structure.
In the documentation it says:
Note that just like with an Activity, you can use either the declarative (XML-based) approach to creating the contained components, or you can nest them programmatically from your code. Well, that's good news! The XML-based approach is exactly what I want! But it doesn't say how to do it, except that it is "like with an Activity". But what I do in an Activity is call setContentView(...) to inflate the views from XML. That method is not available if you for example subclass LinearLayout. So I tried to inflate the XML manually like this:
public class MyCompoundComponent extends LinearLayout {
public MyCompoundComponent(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_layout, this);
} }
This works, except for the fact that the XML I'm loading has LinearLayout declared as the root element. This results in the inflated LinearLayout being a child of MyCompoundComponent which itself already is a LinearLayout!! So now we have a redundant LinearLayout in between MyCompoundComponent and the views it actually needs. Can somebody please provide me with a better way to approach this, avoiding having a redundant LinearLayout instantiated?
View 1 Replies
View Related
Jun 15, 2010
I am writing a custom component (derived from a relative layout) which has to show a dialog. Is there a way to do this using callbacks like oncreatedialog or onpreparedialog? if not: if i have to create the dialog outside oncreatedialog, i have to "attach it to an Activity with setOwnerActivity(Activity)". How can the custom component access the activity it is used in, when it is used in the activity's xml-layout and not created from code?
View 1 Replies
View Related
Oct 5, 2010
I'm reading the android developer docs on creating custom components and one thing that's unclear, is whether you can define the layout of your component using xml and then reuse that across class libraries. like, say for instance, I want to create a class library called myComponents, and in there i want to have myTehAwesumsWidget or whatever, and i want the layout to be defined in xml, can i include that xml in the referenced class library?
View 1 Replies
View Related
Feb 2, 2010
I have made an component for Android, which uses two drawables. Using static values for the drawables in the code, the component works but now I want to declare the values in the properties (XML) does anyone know how to do this? Is there a way to do this without using the attrs.xml?
View 1 Replies
View Related
Feb 25, 2010
Is it possible to create a button with a custom xml layout? Now I want to use this on a button. Anyone know how I can do this? I was thinking if I had Button.java file that extended Button. And then setView( R. layout. mylayout.xml); but that was to easy, and it clearly not working
View 1 Replies
View Related
Nov 28, 2009
Currently, I am creating a custom View class (DrawView) that inherits the View class and adding to my activity programatically by using RelativeLayout and LaoutParams etc. But is there an easier way to do this by adding my DrawView to the layout XML file?
View 4 Replies
View Related
Jun 23, 2009
I've created a custom view via .xml file, and I wanted to add it as a a contentView to an alert Dialog usinf a dialogBuilder:
CODE:.................
The problem is...I can't get my view from my custom layout... I only have an id (int)...
I tried Resource.getLayout(int) => it returns an xmlParser... not very usefull ...
finally the solution I comes up is so disgusting ( it worked but ... let's have a look)
CODE:.......
How can I do that easily without using such a disgusting way... ?
View 2 Replies
View Related
Mar 9, 2010
I am trying to do is to embed a custom view in the default layout main.xml:
CODE:......
As you can see the class is called com.lam.customview.CustomDisplayView, with the id of custom_display_view1. now in the com.lam.customview.CustomDisplayView class, i want to use another layout called custom_display_view.xml because i don't want to programmatically create controls/widgets.
Custom_display_view.xml is just a button and an image, the content of which i want to change based on certain conditions:
CODE:..............
I tried to do:
1)
CODE:........
But got this error, "03-08 20:33:15.711: ERROR/onCreate(10879): Binary XML file line #8: Error inflating class java.lang.reflect.Constructor ".
2)
CODE:..........
But got this error, "03-08 20:28:47.401: ERROR/CustomDisplayView(10806): Resource ID #0x7f050002 type #0x12 is not valid "
Also, if i do it this way, as someone has suggested, it's not clear to me how the custom_display_view.xml is associated with the custom view class.
View 2 Replies
View Related
Jul 15, 2010
I've created my own view by creating a subclass of the SurfaceView class.
However I can't figure out how to add it from the xml layout file.
My current main.xml looks like this:
CODE:............
What have I missed?
My view looks like this
CODE:..............
And it works fine like this:
CODE:..................
But nothing happens when trying to use it from the xml.
View 1 Replies
View Related
Aug 16, 2010
I have a dialog with a custom layout, and I try to close it when I press a button:
private void showAboutDialog() {
dialog = new Dialog(MainMenu.this);
dialog.setContentView(R.layout.about_dialog);
dialog.setCancelable(true);
dialog.setTitle(R.string.about_title);
dialog.show();
LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.about_dialog, (ViewGroup) findViewById(R.id.layout_root));
Button closeButton = (Button) layout.findViewById(R.id.about_close_button);
closeButton.setOnClickListener(new Button.OnClickListener() { public void onClick(View view) { dialog.dismiss();
} } );
}
But it doesn't work.
View 1 Replies
View Related
Apr 29, 2010
The button doesn't show in this layout(code below),image and textview are shown. I tried using relative layout but that doesn't help either.
I'm testing it on 1.5 emulator.
CODE:..........................
View 1 Replies
View Related
Jul 26, 2010
I have a custom layout that draws a transparent rounded rectangle beneath its children. The problem is when I try to add it to my xml file, it doesn't show up. Also, when I try to add parameters to it (i.e. android:layout_width) the popup shows that none of them are available. The same thing happens to any child views I add. public class RoundRectLayout extends LinearLayout
{ private RectF shape;public RoundRectLayout(Context context)
{super(context);
LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutInflater.inflate(R.layout.settings, this);
shape = new RectF();
}public RoundRectLayout(Context context, AttributeSet attrs)
{ super(context, attrs);
LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutInflater.inflate(R.layout.settings, this);
shape = new RectF();
} @Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{shape = new RectF(0, 0, w - 5, h - 5);
super.onSizeChanged(w, h, oldw, oldh);
}@Override
protected void dispatchDraw(Canvas canvas)
Paint temp = new Paint();
temp.setAlpha(125);
canvas.drawRoundRect(shape, 10f, 10f, temp);
super.dispatchDraw(canvas);
View 2 Replies
View Related
Jun 13, 2010
I am having trouble getting my layout to give me result I need, I already tried many options and it seems that I'm doing something wrong or completely missing something.
I have a listview with a custom row layout I can't seem to working although it shouldn't be complex. I need of the list row to insist of:
Icon -- title text (bigger and bold) with a short multi line text under the title -- ImageButton
My problem in most of my tests is the icon to the right usually doesn't appear, I guess my center group grows and takes all the space of the button. My last failed attempt was with a Relative Layout, didn't have too much luck with a Linear Layout either.
Here is the row XML:
CODE:.........................
View 2 Replies
View Related
Aug 6, 2010
I am running a sqlite query and binding the returned data to a ListAdapter.
I have used the following example
ListActivity | Android Developers
However, having defined a seperate layout for the rows I cannot change the typeface for textview text1 to a custom one from assets
Here is the row layout
CODE:................
Here is the code from the andriod tutorial
CODE:............
We'll define a custom screen layout here (the one shown above), but typically, you could just use the standard ListActivity layout. setContentView(R.layout.custom_list_activity_view) ;
Query for all people contacts using the Contacts.People convenience class. Put a managed wrapper around the retrieved cursor so we don't have to worry about requerying or closing it as the activity changes state.
CODE:................
Now create a new list adapter bound to the cursor. SimpleListAdapter is designed for binding to a Cursor.
CODE:................
Specify the row template to use (here, two columns bound to the two retrieved cursor rows). mCursor, // Pass in the cursor to bind tonew String[]{People.NAME, People.COMPANY}, // Array of cursor columns to bind to. new int[] {android.R.id.text1, android.R.id.text2}); // Parallel array of which template objects to bind to those columns.
CODE:................
View 2 Replies
View Related
Aug 8, 2010
I have created a custom list item layout just like in this article http://developer.android.com/resources/articles/layout-tricks-efficie....
Each list item has icon, title and summary.
I would like to declare an xml resource that would provide data for that list. Just like you use <string-array> to populate the list using ArrayAdapter<String>.
The simple ArrayAdapter<String> can be populated from:
CODE:..........
I need each <item> to have icon, title and summary. Somewhat similar to:
CODE:..........
I would use <menu> but menu doesn't have summary if I'm not mistaken.
View 10 Replies
View Related
Jul 29, 2010
I am trying to refer to a custom View in the helloWorld XML layout but I get the following exception:
Error inflating class acme.my.MyTextView.
However, I am able to instantiate the view and add it to the main content view manually. The custom View is built from it's own XML layout. How do I get this to work?
CODE:....................
View 1 Replies
View Related
Oct 12, 2010
I'm experimenting with the Android platform, and I'm beginning to love it, but right now I'm stuck, at this cursor/list adapter problem-thing.
The thing is, that I request a function, returning a data object, with several properties I'd like to map to different TextView's.
My list_item.xml
CODE:...........
So what I would like to do is: Map a property of an array of objects to several fields in the file.
View 1 Replies
View Related
May 21, 2010
How to I tell my own custom Spinner Layout to use my Theme? code...
View 2 Replies
View Related