Skip to content

Instantly share code, notes, and snippets.

@rjlutz
Last active September 1, 2021 00:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rjlutz/275c22ca513c1ad990b23cb7ef7733f5 to your computer and use it in GitHub Desktop.
Save rjlutz/275c22ca513c1ad990b23cb7ef7733f5 to your computer and use it in GitHub Desktop.
Dialog Fragment RGB, passes values back to Activity
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.5" />
<TextView
android:id="@+id/tvSwatch"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:background="@android:color/darker_gray"
app:layout_constraintBottom_toTopOf="@+id/guideline"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#"
android:textSize="72sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline" />
</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<SeekBar
android:id="@+id/sbBlue"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:max="255"
android:progress="127"
app:layout_constraintBottom_toTopOf="@+id/tvSwatch"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sbGreen" />
<SeekBar
android:id="@+id/sbGreen"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:max="255"
android:progress="127"
app:layout_constraintBottom_toTopOf="@+id/sbBlue"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sbRed" />
<SeekBar
android:id="@+id/sbRed"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="24dp"
android:max="255"
android:progress="127"
app:layout_constraintBottom_toTopOf="@+id/sbGreen"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvSwatch"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#7F7F7F"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sbBlue" />
</androidx.constraintlayout.widget.ConstraintLayout>
package edu.ggc.lutz.dialogfragmentrgbpractice1sep;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
public class EditDialogFragment extends DialogFragment {
private static final String LOG_TAG = "RGBDialog";
private SeekBar sbRed, sbGreen, sbBlue;
private TextView tvSwatch;
private OnColorChangeListener colorListener;
public interface OnColorChangeListener {
void onColorChanged(int red, int green, int blue);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.new_sel_rgb);
LayoutInflater inflater = requireActivity().getLayoutInflater(); // set the custom layout
View dialogView = inflater.inflate(R.layout.edit_color_dialog, null);
builder.setView(dialogView);
tvSwatch = dialogView.findViewById(R.id.tvSwatch);
sbRed = dialogView.findViewById(R.id.sbRed);
sbRed.getProgressDrawable().setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);
sbRed.getThumb().setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);
sbGreen = dialogView.findViewById(R.id.sbGreen);
sbGreen.getProgressDrawable().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_IN);
sbGreen.getThumb().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_IN);
sbBlue = dialogView.findViewById(R.id.sbBlue);
sbBlue.getProgressDrawable().setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_IN);
sbBlue.getThumb().setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_IN);
final SeekBar.OnSeekBarChangeListener listener = new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
int bg = Color.rgb(sbRed.getProgress(),sbGreen.getProgress(),sbBlue.getProgress());
tvSwatch.setBackgroundColor(bg);
}
@Override public void onStartTrackingTouch(SeekBar seekBar) { }
@Override public void onStopTrackingTouch(SeekBar seekBar) { }
};
sbRed.setOnSeekBarChangeListener(listener);
sbGreen.setOnSeekBarChangeListener(listener);
sbBlue.setOnSeekBarChangeListener(listener);
builder.setPositiveButton(R.string.start, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Log.v(LOG_TAG, "clicked Save.");
colorListener.onColorChanged(sbRed.getProgress(),sbGreen.getProgress(),sbBlue.getProgress());
}
});
builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Log.v(LOG_TAG, "clicked cancel.");
}
});
return builder.create();
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
this.colorListener = (OnColorChangeListener) context;
}
}
package edu.ggc.lutz.dialogfragmentrgbpractice1sep;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.SeekBar;
import android.widget.TextView;
import java.util.zip.Inflater;
public class MainActivity extends AppCompatActivity implements EditDialogFragment.OnColorChangeListener {
private TextView tvSwatch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvSwatch = findViewById(R.id.tvSwatch);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == R.id.action_edit) {
FragmentManager manager = getSupportFragmentManager();
EditDialogFragment dialog = new EditDialogFragment();
dialog.show(manager, "edittDialog");
}
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public void onColorChanged(int red, int green, int blue) {
int bg = Color.rgb(red,green,blue);
tvSwatch.setBackgroundColor(bg);
}
}
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="edu.ggc.lutz.basicdeleteme.MainActivity">
<item
android:id="@+id/action_edit"
android:icon="@android:drawable/ic_menu_edit"
android:title="@string/action_add"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never" />
</menu>
<resources>
<string name="app_name">DialogFragment RGB</string>
<string name="action_add">Edit</string>
<string name="action_settings">Settings</string>
<string name="new_sel_rgb">Select RGB</string>
<string name="start">Save</string>
<string name="cancel">Cancel</string>
</resources>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment