I am trying to add a Custom Layout to ActionBar using the ActionBarSherlock library.
I find that although there seems to be no error,the Layout is not displayed.
View customView=LayoutInflater.from(this).inflate(R.layout.layout_actionbar_top,null);
ImageButton ab_camera=(ImageButton) customView.findViewById(R.id.ab_camera);
ImageButton ab_gallery=(ImageButton)customView.findViewById(R.id.ab_gallery);
ab_camera.setOnClickListener(new OnClickListener(){
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
startActivity(new Intent(getBaseContext(),CameraActivity.class));
}});
ab_gallery.setOnClickListener(new OnClickListener(){
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, IMAGE_REQUEST_CODE);
}});
LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,Gravity.RIGHT | Gravity.CENTER_VERTICAL);
getSupportActionBar().setCustomView(customView,params);
The Activity instead loads without the custom layout in the ActionBar.
This is the Custom layout,a LinearLayout that is horizontal:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageButton android:id="#+id/ab_camera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="#android:drawable/ic_menu_camera"/>
<ImageButton android:id="#+id/ab_gallery"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="#android:drawable/ic_menu_gallery"
/>
</LinearLayout>
I had failed to set a flag enabling ActionBarSherlock to display my customView to true.
getSupportActionBar().setDisplayShowCustomEnabled(true);
Related
I have an android app with min sdk version 14.
in my values-v14 folder, in styles.xml I have this:
<style name="MyButtonStyle" parent="android:Widget.Holo.Button"></style>
I apply this style to two buttons in one of my activities (the activity looks like a big dialog).
I run the app on:
OnePlus phone (version 4.4.4 - api 19)
GT-I8190 (version 4.1.2 - api 16)
For some reason the buttons look different in color, which is weird because the Holo Theme should be available in API 14 and above (and both phones are above 14).
Small difference but its there (in the OnePlus the buttons are darker and in the GT they are lighter). Why is it like that? shouldn't it be the same?
OnePlus Image:
GT-I8190 Image:
----------------- EDIT - Adding Code --------------------
Here is the xml file with the buttons (not_allowed_dialog.xml).
As you can see, there isn't any drawables in the button or anywhere else.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:orientation="vertical" >
<TextView
android:id="#+id/not_logged_in_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="Please log in to add a ride"
android:textAlignment="center"
android:textColor="#FFFFFF"
android:textSize="25sp" />
<LinearLayout
android:id="#+id/not"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="#+id/not_logged_in_text_view"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dip"
android:orientation="horizontal"
android:paddingBottom="1.0dip"
android:paddingLeft="4.0dip"
android:paddingRight="4.0dip"
android:paddingTop="5.0dip" >
<Button
android:id="#+id/not_allowed_login"
style="#style/MyButtonStyle"
android:layout_width="0.0dip"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:text="Login Now!" />
<Button
android:id="#+id/not_allowed_register"
style="#style/MyButtonStyle"
android:layout_width="0.0dip"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:text="Register Now!" />
</LinearLayout>
</RelativeLayout>
Also - Activity code:
public class DialogActivity extends Activity {
private Button toRegisterBtn, toLoginBtn;
#Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.not_allowed_dialog);
setFinishOnTouchOutside(false);
toRegisterBtn = (Button) findViewById(R.id.not_allowed_register);
toLoginBtn = (Button) findViewById(R.id.not_allowed_login);
toRegisterBtn.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(getApplicationContext(),
RegisterActivity.class);
startActivity(i);
setResult(RESULT_OK, null);
finish();
}
});
toLoginBtn.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(getApplicationContext(),
LoginActivity.class);
startActivity(i);
setResult(RESULT_OK, null);
finish();
}
});
}
#Override
public void onBackPressed() {
// TODO Auto-generated method stub
}
}
i want to have two relativelayout in first relativelayout have map and in second relativelayout i have the list..,i want on starting only layout with map will be visible on screen with a button,,when i click on button then layout with listview get open from right side with new new button on the top of it,,and prevoius button get hide.and screen get divided with two parts with different layouts..i have done some thing but from starting onward m getting half half screen.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="#+id/ListView_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="1" >
<RelativeLayout
android:id="#+id/rl_ListView1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5" >
<Button
android:id="#+id/getdirection"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get Directions" />
<fragment
android:id="#+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment" >
</fragment>
</RelativeLayout>
<RelativeLayout
android:id="#+id/rl_ListView2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:visibility="invisible" >
<Button
android:id="#+id/hide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get Directions" />
<ListView
android:id="#+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#android:color/white"
android:visibility="invisible" />
</RelativeLayout>
</LinearLayout>
MainActivity
show = (TextView)findViewById(R.id.getdirection);
show1 = (TextView)findViewById(R.id.hide);
rt = (RelativeLayout)findViewById(R.id.rl_ListView2);
show.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(rt.getVisibility()==View.INVISIBLE)
{
rt.setVisibility(View.VISIBLE);
}
show.setVisibility(View.INVISIBLE);
}
});
show1.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(rt.getVisibility()==View.VISIBLE)
{
rt.setVisibility(View.INVISIBLE);
}
show1.setVisibility(View.INVISIBLE);
}
});
Try this:
You are getting layout1 in half screen from starting due to weight property. You can try not giving weight in starting and give it programatically on button click.
button.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
button1.setVisibility(View.GONE); //hide old button
layout2.setVisibility(View.VISIBLE); //show layout2
//set Relativelayout 1 to half screen
RelativaLayout.LayoutParams params = layout1.getLayoutParams();
params.weight = 0.5;
layout1.setLayoutParams(params);
}
});
Hope this helps.
Set visibility as Gone instead of Invisible
button.setOnClickListener(this);
public void onClick(View v) {
layoutid.setVisibility(View.GONE);
}
You can try with isShown() as suggested by Amiya
<b>
button2.setOnClickListener(new View.OnClickListener(){
#Override
public void onClick(View view) {
if(button1.isShown()) {
// Your_Staff
}
else{
// Your_Staff
}
}
});
</b>
From my view you did not set the orientation in the LinearLayout to be vertical for the two RelativeLayouts. I also suggests you put the map and Button in a FrameLayout as well instead of RelativeLayout.
Another weird behavior encountered here. This time my dialog is shrinking width wise inspite of setting all parent layout's width as fill_parent. Here is the image...
I have tried making it an activity with theme set as Dialog in manifest. Still it is behaving same. However it becomes normal as soon as I set layout_width for first TextView "User Agreement" as fill_parent. But I don't understand this behavior as it should not depend on TextView's width for its own width. Please tell me if there is any other efficient way to deal with these type of situations. My code for layout is below:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#layout/gradientback"
android:orientation="vertical" >
<TextView
android:id="#+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="User Agreement"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#B80303" />
<View
android:layout_width="fill_parent"
android:layout_height="3dip"
android:background="?android:attr/listDivider" >
</View>
<LinearLayout
android:id="#+id/linearLayout4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<CheckBox
android:id="#+id/checkBoxForTermsId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#7B4302"
android:text="I Agree The Terms & Conditions" >
</CheckBox>
This is not whole code for layout because I don't think it is needed...
The code for showing Dialog is as follows:
private void showAgreementBox() {
// TODO Auto-generated method stub
final Dialog dialog = new Dialog(Launcher.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.useragreement);
dialog.setTitle("User Agreement");
dialog.setCancelable(false);
final TextView userAg = (TextView) dialog.findViewById(R.id.textViewOfUserAg);
final CheckBox checkUserAg = (CheckBox) dialog.findViewById(R.id.checkBoxForTermsId);
final Button continueB = (Button) dialog.findViewById(R.id.continueB);
checkUserAg.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (checkUserAg.isChecked() == true) {
continueB.setEnabled(true);
} else {
continueB.setEnabled(false);
}
}
});
continueB.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
dialog.dismiss();
//checkForTrialPeriod(isUserRegisterd);
}
});
Button cancelB = (Button) dialog.findViewById(R.id.cancelB);
cancelB.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
dialog.show();
}
Fix the width of your parent layout
android:layout_width="400dp"
fill_parent works for Activity xml but for dialogs you have to set the width.
If you are looking for a general solution set an image as background in the parent layout just like we place images in different drawable folders to support multiple screens.
You can also set width as full screen using
dialog.getWindow().getAttributes().width = LayoutParams.FILL_PARENT;
Why this behavior is shown by dialog (quoting from this post by Dianne Hackborn)
The dialog theme, as part of its nature, sets the top-level window
layout to be WRAP_CONTENT. You could try manually setting the Window
layout width and height to FILL_PARENT [...]
Also took reference from this answer.
setContentView(R.layout.layout_name);
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
this worked for me .
I'm using a listview. Before adding the main list items to the listview, i add a header with to the listview using addheaderview(v). header have two buttons.
In logcat..it gives problem at
btnhome.setOnClickListener(new View.OnClickListener() {
and it force close.
plz help me where is error in below code.
waiting for your reply
thanx in advance
enter code here
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.games_by_category);
Global globalclass=((Global)getApplicationContext());
globalclass.setpageno(0);
lstview =(ListView)findViewById(android.R.id.list);
LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.header, null);
//View v = getLayoutInflater().inflate(R.layout.header, null);
v.setMinimumHeight(10);
lstview.addHeaderView(v);
btnhome=(Button)findViewById(R.id.btnHome);
btnhome.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
btnhome.setTextColor(Color.BLACK);
Global globalclass=((Global)getApplicationContext());
Intent inte=new Intent(GamesByCatActivity.this,HotGamesActivity.class);
startActivity(inte);
}
});
Just get the Buttons from the header view and set the onClickListener.
View header;
Button headerButton = header.findViewById(R.id.btn1);
headerButton.setOnClickListener(this);
listView.addHeaderView(header);
I am not able to understand your problem. What do you want to do? If you have ListView and header then you use LinearLayout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="#+id/_lv_babies" >
</ListView>
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" android:background="#color/blue_email"
>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Edit" android:textSize="15dp" android:padding="10dp"
android:layout_margin="5dp" android:textColor="#color/black"
android:id="#+id/_btn_edit"/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add" android:textSize="15dp" android:padding="10dp"
android:layout_margin="5dp" android:textColor="#color/black"
android:id="#+id/_btn_add"/>
</RelativeLayout>
</LinearLayout>
This is the example you can use like this.
For your button click....if its works then tick on right click or accept my answer.
protected void setXmlComponents(){
_btn_add =(Button)findViewById(R.id._btn_add);
_btn_edit =(Button)findViewById(R.id._btn_edit);
}
protected void setListener(){
_btn_add.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
_btn_edit.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
}
Im trying to change the icon on the handle when i try to open the slidingdrawer.
When I extract the handle from the view and sets the onclicklistener or ontouchlistener it seems to never get trigget.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SlidingDrawer drawer = (SlidingDrawer)findViewById(R.id.drawer_landscape);
ImageView handle = (ImageView)findViewById(R.id.handle_l);
handle.setFocusable(true);
handle.setOnClickListener(new OnClickListener(){
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i("test","onClick");
}
});
}
And my XML
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="#+id/base_frame_layout"
android:layout_gravity="bottom"
>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="#string/hello"
/>
</LinearLayout>
<SlidingDrawer
android:id="#+id/drawer_landscape"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:handle="#+id/handle_l"
android:content="#+id/content"
android:orientation="vertical"
android:visibility="visible"
>
<ImageView
android:id="#+id/handle_l"
android:layout_height="50px"
android:layout_width="64px"
android:padding="0px"
android:src="#drawable/icon"
/>
<TextView
android:id="#+id/content"
android:text="content"
android:layout_height="50px"
android:layout_width="64px"
/>
</SlidingDrawer>
</FrameLayout>
I was hoping this code should log "onClick" message, but it doesn't.
Any ideas?
I found it, it was pritty easy... I just need to setOnDrawerScrollListener on my drawer.
than implement the 2 methods onScrollEnded and onScrollStarted.
mSlidingDrawer.setOnDrawerScrollListener(new OnDrawerScrollListener(){
#Override
public void onScrollEnded() {
// TODO Auto-generated method stub
Log.i("ddd","onScrollEnded slider");
slider_animation.reverseTransition(HANDLE_ANIMATION_SPEED);
}
#Override
public void onScrollStarted() {
// TODO Auto-generated method stub
Log.i("ddd","onScrollStarted slider");
slider_animation.startTransition(HANDLE_ANIMATION_SPEED);
}
});
I rather use an animation on the handle instead of changing the Image bacause of the flickering.
I found it for along time , but now it is completed about it .
It is the best way for Change Image Handle when you click to view SlidingDrawer.
It have 2 Method that we use in code below.
final SlidingDrawer drawer = (SlidingDrawer)findViewById(R.id.slidingDrawer);
drawer.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener() {
#Override
public void onDrawerOpened() {
arr.setImageResource(R.drawable.arrowdown);
}
});
drawer.setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener() {
#Override
public void onDrawerClosed() {
arr.setImageResource(R.drawable.arrowup);
}
});