Last active
August 29, 2015 14:06
-
-
Save chiemy/2a8f10cc32886cf40c24 to your computer and use it in GitHub Desktop.
blog code snippet
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.vogella.android.view.compoundview; | |
import android.content.Context; | |
import android.content.res.TypedArray; | |
import android.util.AttributeSet; | |
import android.view.Gravity; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.widget.ImageView; | |
import android.widget.LinearLayout; | |
import android.widget.TextView; | |
public class ColorOptionsView extends View { | |
private View mValue; | |
private ImageView mImage; | |
public ColorOptionsView(Context context, AttributeSet attrs) { | |
super(context, attrs); | |
TypedArray a = context.obtainStyledAttributes(attrs, | |
R.styleable.Options, 0, 0); | |
String titleText = a.getString(R.styleable.Options_titleText); | |
int valueColor = a.getColor(R.styleable.Options_valueColor, | |
android.R.color.holo_blue_light); | |
a.recycle(); | |
// more stuff | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<resources> | |
<declare-styleable name="ColorOptionsView"> | |
<attr name="titleText" format="string" localization="suggested" /> | |
<attr name="valueColor" format="color" /> | |
</declare-styleable> | |
</resources> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:tools="http://schemas.android.com/tools" | |
<!-- define new name space for your attributes --> | |
xmlns:custom="http://schemas.android.com/apk/res/com.vogella.android.view.compoundview" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
android:orientation="vertical" | |
> | |
<!-- Assume that this is your new component. It uses your new attributes --> | |
<com.vogella.android.view.compoundview.ColorOptionsView | |
android:layout_width="match_parent" | |
android:layout_height="?android:attr/listPreferredItemHeight" | |
custom:titleText="Background color" | |
custom:valueColor="@android:color/holo_green_light" | |
/> | |
</LinearLayout> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.vogella.android.customview.compoundview; | |
import com.vogella.android.view.compoundview.R; | |
import android.content.Context; | |
import android.content.res.TypedArray; | |
import android.util.AttributeSet; | |
import android.view.Gravity; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.widget.ImageView; | |
import android.widget.LinearLayout; | |
import android.widget.TextView; | |
public class ColorOptionsView extends LinearLayout { | |
private View mValue; | |
private ImageView mImage; | |
public ColorOptionsView(Context context, AttributeSet attrs) { | |
super(context, attrs); | |
TypedArray a = context.obtainStyledAttributes(attrs, | |
R.styleable.ColorOptionsView, 0, 0); | |
String titleText = a.getString(R.styleable.ColorOptionsView_titleText); | |
int valueColor = a.getColor(R.styleable.ColorOptionsView_valueColor, | |
android.R.color.holo_blue_light); | |
a.recycle(); | |
setOrientation(LinearLayout.HORIZONTAL); | |
setGravity(Gravity.CENTER_VERTICAL); | |
LayoutInflater inflater = (LayoutInflater) context | |
.getSystemService(Context.LAYOUT_INFLATER_SERVICE); | |
inflater.inflate(R.layout.view_color_options, this, true); | |
TextView title = (TextView) getChildAt(0); | |
title.setText(titleText); | |
mValue = getChildAt(1); | |
mValue.setBackgroundColor(valueColor); | |
mImage = (ImageView) getChildAt(2); | |
} | |
public ColorOptionsView(Context context) { | |
this(context, null); | |
} | |
public void setValueColor(int color) { | |
mValue.setBackgroundColor(color); | |
} | |
public void setImageVisible(boolean visible) { | |
mImage.setVisibility(visible ? View.VISIBLE : View.GONE); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<merge xmlns:android="http://schemas.android.com/apk/res/android" > | |
<TextView | |
android:layout_width="0dp" | |
android:layout_height="wrap_content" | |
android:layout_weight="1" | |
android:layout_centerVertical="true" | |
android:layout_marginLeft="16dp" | |
android:textSize="18sp" | |
/> | |
<View | |
android:layout_width="26dp" | |
android:layout_height="26dp" | |
android:layout_centerVertical="true" | |
android:layout_marginLeft="16dp" | |
android:layout_marginRight="16dp" | |
/> | |
<ImageView | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginRight="16dp" | |
android:layout_centerVertical="true" | |
android:visibility="gone" | |
/> | |
</merge> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<resources> | |
<declare-styleable name="Options"> | |
<attr name="titleText" format="string" localization="suggested" /> | |
<attr name="valueColor" format="color" /> | |
</declare-styleable> | |
</resources> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:tools="http://schemas.android.com/tools" | |
xmlns:custom="http://schemas.android.com/apk/res/com.vogella.android.view.compoundview" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
android:orientation="vertical" | |
android:showDividers="middle" | |
android:divider="?android:attr/listDivider" | |
tools:context=".MainActivity" > | |
<com.vogella.android.view.compoundview.ColorOptionsView | |
android:id="@+id/view1" | |
android:layout_width="match_parent" | |
android:layout_height="?android:attr/listPreferredItemHeight" | |
android:background="?android:selectableItemBackground" | |
android:onClick="onClicked" | |
custom:titleText="Background color" | |
custom:valueColor="@android:color/holo_green_light" | |
/> | |
<com.vogella.android.view.compoundview.ColorOptionsView | |
android:id="@+id/view2" | |
android:layout_width="match_parent" | |
android:layout_height="?android:attr/listPreferredItemHeight" | |
android:background="?android:selectableItemBackground" | |
android:onClick="onClicked" | |
custom:titleText="Foreground color" | |
custom:valueColor="@android:color/holo_orange_dark" | |
/> | |
</LinearLayout> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.vogella.android.customview.compoundview; | |
import com.vogella.android.view.compoundview.R; | |
import android.app.Activity; | |
import android.os.Bundle; | |
import android.view.Menu; | |
import android.view.View; | |
import android.widget.Toast; | |
public class MainActivity extends Activity { | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
} | |
@Override | |
public boolean onCreateOptionsMenu(Menu menu) { | |
// Inflate the menu; this adds items to the action bar if it is present. | |
getMenuInflater().inflate(R.menu.activity_main, menu); | |
return true; | |
} | |
public void onClicked(View view) { | |
String text = view.getId() == R.id.view1 ? "Background" : "Foreground"; | |
Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MyActivity extends Activity { | |
private RetainedFragment dataFragment; | |
@Override | |
public void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.main); | |
// find the retained fragment on activity restarts | |
FragmentManager fm = getFragmentManager(); | |
dataFragment = (DataFragment) fm.findFragmentByTag(“data”); | |
// create the fragment and data the first time | |
if (dataFragment == null) { | |
// add the fragment | |
dataFragment = new DataFragment(); | |
fm.beginTransaction().add(dataFragment, “data”).commit(); | |
// load the data from the web | |
dataFragment.setData(loadMyData()); | |
} | |
// the data is available in dataFragment.getData() | |
... | |
} | |
@Override | |
public void onDestroy() { | |
super.onDestroy(); | |
// store the data in the fragment | |
dataFragment.setData(collectMyLoadedData()); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> { | |
private List<ViewModel> items; | |
private int itemLayout; | |
public MyRecyclerAdapter(List<ViewModel> items, int itemLayout) { | |
this.items = items; | |
this.itemLayout = itemLayout; | |
} | |
@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { | |
View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false); | |
return new ViewHolder(v); | |
} | |
@Override public void onBindViewHolder(ViewHolder holder, int position) { | |
ViewModel item = items.get(position); | |
holder.text.setText(item.getText()); | |
holder.image.setImageBitmap(null); | |
Picasso.with(holder.image.getContext()).cancelRequest(holder.image); | |
Picasso.with(holder.image.getContext()).load(item.getImage()).into(holder.image); | |
holder.itemView.setTag(item); | |
} | |
@Override public int getItemCount() { | |
return items.size(); | |
} | |
public static class ViewHolder extends RecyclerView.ViewHolder { | |
public ImageView image; | |
public TextView text; | |
public ViewHolder(View itemView) { | |
super(itemView); | |
image = (ImageView) itemView.findViewById(R.id.image); | |
text = (TextView) itemView.findViewById(R.id.text); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public void add(ViewModel item, int position) { | |
items.add(position, item); | |
notifyItemInserted(position); | |
} | |
public void remove(ViewModel item) { | |
int position = items.indexOf(item); | |
items.remove(position); | |
notifyItemRemoved(position); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class RetainedFragment extends Fragment { | |
// data object we want to retain | |
private MyDataObject data; | |
// this method is only called once for this fragment | |
@Override | |
public void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
// retain this fragment | |
setRetainInstance(true); | |
} | |
public void setData(MyDataObject data) { | |
this.data = data; | |
} | |
public MyDataObject getData() { | |
return data; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!doctype html> | |
<html lang="en"> | |
<head> | |
<meta charset="utf-8" /> | |
<title>Hello World</title> | |
<!-- CSS for presentation. --> | |
<style> | |
h1 { font-size: 14px; color: hotpink; } | |
button { color: red; } | |
</style> | |
</head> | |
<body> | |
<h1>Hello World</h1> | |
<button>Click Me!</button> | |
<!-- JavaScript for interactivity. --> | |
<script> | |
// Get a handle on the first button element in the document. | |
var button = document.querySelector( "button" ); | |
// If a user clicks on it, say hello! | |
button.addEventListener( "click", function( ev ) { | |
alert( "Hello" ); | |
}, false); | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment